답변:
find
통해 출력을 파이프 할 수 있습니다 head
.
find . -name '*.txt' | head -n 3
head
파이프의 왼쪽에서 입력을 기다립니다. 그런 다음 find
지정된 기준과 일치하는 파일을 시작하고 검색하여 파이프를 통해 출력을 보냅니다. 경우 head
요청 라인들의 수를 수신하여 인쇄되고, 상기 배관을 개폐 종료한다. find
닫힌 파이프를 확인하고 종료합니다. 간단하고 우아하며 효율적입니다.
이 다른 대답 은 다소 결함이 있습니다. 명령은
find . -name '*.txt' | head -n 3
그런 다음 주석 [강조] 중 하나에 설명 이 있습니다 .
head
파이프의 왼쪽에서 입력을 기다립니다. 그런 다음find
지정된 기준과 일치하는 파일을 시작하고 검색하여 파이프를 통해 출력을 보냅니다. 경우head
요청 라인들의 수를 수신하여 인쇄되고, 상기 배관을 개폐 종료한다.find
닫힌 파이프를 확인하고 종료합니다. 간단하고 우아하며 효율적 입니다.
이것은 거의 사실입니다.
문제는 find
닫힌 파이프가 쓰려고 할 때만 닫힌 파이프입니다.이 경우에는 네 번째 일치 항목이 발견 된 것입니다. 그러나 4 번째 경기가 없으면 find
계속 진행됩니다. 당신의 껍질은 기다릴 것입니다! 스크립트에서 발생하면 파이프 출력이 최종적이고 아무것도 추가 할 수 없다는 것을 이미 알고 있음에도 불구하고 스크립트가 대기합니다. 그렇게 효율적이지 않습니다.
이 특정 기능 find
이 빠르게 완료 되면 큰 파일 트리에서 복잡한 검색을 수행하면 명령이 다음에 수행하려는 작업을 불필요하게 지연시킬 수 있습니다.
완벽하지 않은 솔루션은 실행하는 것입니다.
( find … & ) | head -n 3
이 방법으로 head
종료하면 쉘이 즉시 계속됩니다. 백그라운드 find
프로세스는 무시되거나 (조만간 종료 될 수 있음) 또는 대상으로 지정 pkill
될 수 있습니다.
개념을 증명하기 위해 검색 할 수 있습니다 /
. 우리는 하나의 경기 만 기대하지만 find
어디에서나 찾으면 많은 시간이 걸릴 수 있습니다.
find / -wholename / 2>/dev/null | head -n 1
문제가 보이면 Ctrl+ C로 종료 하십시오. 이제 비교하십시오 :
pidof find ; ( find / -wholename / 2>/dev/null & ) | head -n 1 ; pidof find
find . -name '*.txt' -print -quit
첫 번째 일치 만 표시하고 첫 번째 일치find
후에 종료 할 수 있습니다 . "n 개의 일치 항목을 찾은 후 종료"하는 경우에 적응할 수 있는지 여부를 모르겠습니다.