.txt
100바이트보다 긴 모든 파일의 첫 번째 줄을 인쇄하고 싶습니다 . 지금까지 기준을 충족하는 파일을 수집했지만 파일의 첫 번째 텍스트 줄을 인쇄하는 방법을 모르겠습니다.
find -size +100c -name "*.txt"
아니면 내가 완전히 잘못된 길을 가고 있는 걸까?
답변1
head -n 1
각 파일에 대해 실행 해야 합니다 .
find . -size +100c -name '*.txt' -execdir head -n 1 {} \;
또는 find
지원하지 않는 경우 -execdir
,
find . -size +100c -name '*.txt' -exec head -n 1 {} \;
귀하의 head
버전이 이를 지원 -q
하거나 단일 호출로 여러 파일을 처리할 때 각 파일에 표시되는 헤더에 신경 쓰지 않는 경우 다음을 사용하여 두 변형을 약간 더 효율적으로 만들 수 있습니다.
… -exec head -q -n 1 {} +
(바라보다경쟁 조건과-exec
이점을 이해하십시오 -execdir
. )
답변2
xargs
다음 출력을 처리하라는 제안이 자주 표시됩니다.find
find -size +100c -name "*.txt" | xargs head -n 1
xargs 목록 가져오기파일 이름주어진 명령에 대한 인수로 제공된 파일 이름을 사용하여 find에 의해 생성됩니다. "너무 많은 인수" 또는 "너무 긴 명령" 오류를 방지하기 위해 이 작업을 지능적으로 수행합니다.
head -q -n1
파일 이름이 여러 개 주어졌을 때 추가 헤더를 제공하고 싶지 않은 경우 사용할 수 있습니다.
파일 이름에는 거의 모든 문자(개행 문자 포함)가 포함될 수 있으므로 find|xargs를 호출하는 것이 더 안전합니다.
find -size +100c -name "*.txt" -print0 | xargs -0 head -n 1
- 이
-print0
지시문은 기본 개행 문자 대신 널 바이트로 구분된 파일 이름을 출력합니다. - xargs
-0
옵션은 기본 개행 문자 대신 널 바이트를 인수 구분 기호로 사용합니다.