find
처음 두 개의 일치 항목만 표시한 다음 종료하는 명령을 어떻게 만들 수 있습니까 ?첫 번째 일치 후 find 명령을 어떻게 중지할 수 있나요?녹음된 버전은 단 두 개뿐입니다.
답변1
연결된 답변에서 로 바꾸세요 1
.2
find . ... -print | head -n 2
이 점에 유의하시기 바랍니다하다파일 이름은 일반적인 것으로 가정됩니다. 즉, 개행 문자가 포함되어 있지 않습니다. 따라서 스크립팅 솔루션에는 가장 적합하지 않습니다. (바라보다찾기 결과를 반복하는 것이 왜 나쁜 습관입니까?자세한 내용을 알아보세요. )은 여전히 빠른 대화형 사용을 위한 가장 좋은 방법입니다.
또한 파일 수가 많은 시스템에서는 프로세스가 더 많은 파일 이름 쓰기 시도를 마친 후 종료될 때 SIGPIPE를 수신하므로 이 -exec sh -c 'echo "$1"; echo "$2"' _ {} +
방법보다 더 빠릅니다 .find
head
find
-exec
결과가 충분하면 명령이 2개 이상의 결과를 인쇄할 수 있다는 점은 말할 것도 없습니다 . 예를 들어 find / -exec sh -c 'echo "$1"; echo "$2"' _ {} +
오랫동안 종료되지 않으며 각 ARG_MAX 결과에서 총 2개의 파일이 아닌 2개의 파일이 인쇄됩니다.
답변2
find
호출과 함께 사용 sh
:
find . -type f -exec sh -c 'echo "$1" "$2"; done' _ {} +
+
종결자가 사용되었기 때문에 모든 파일이 확장되고 , 발견된 -exec
첫 번째와 두 번째 파일인 첫 find
번째와 두 번째 인수만 인쇄됩니다.
또는 아래와 같이 사용하면 검색된 파일 수를 지정할 수 있습니다. (2개 파일이 아니라 100개 파일일 수도 있습니다. 그런 다음 위에서는 100개 파일을 모두 지정해야 합니다!)출구명령(실제로 쉘은 exit
명령을 보내고 find
실행 중인 프로세스를 종료시킵니다).
find -type f -exec sh -c '
for file; do echo "$file"; c=$((c+1)); [ $c = 2 ] && exit; done' _ {} +