특정 "찾기" 기준과 일치하는 모든 파일의 첫 번째 줄을 어떻게 인쇄할 수 있나요?

특정 "찾기" 기준과 일치하는 모든 파일의 첫 번째 줄을 어떻게 인쇄할 수 있나요?

.txt100바이트보다 긴 모든 파일의 첫 번째 줄을 인쇄하고 싶습니다 . 지금까지 기준을 충족하는 파일을 수집했지만 파일의 첫 번째 텍스트 줄을 인쇄하는 방법을 모르겠습니다.

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옵션은 기본 개행 문자 대신 널 바이트를 인수 구분 기호로 사용합니다.

관련 정보