프로그램 기반 unix find 명령에서 파일 제외/포함

프로그램 기반 unix find 명령에서 파일 제외/포함

다른 프로그램의 출력 또는 종료 코드를 기반으로 find(1) 결과에 파일을 포함하거나 제외할 수 있는 방법이 있는지 궁금합니다. 특히 정규 표현식과 일치하는 항목이 포함된 파일만 반환하도록 find(1)를 실행할 수 있기를 바랍니다.

egrep을 통해 find(1)의 출력을 파이프하면 이 작업을 수행할 수 있다는 것을 알고 있지만 find(1) 내에서 이 모든 작업을 수행할 수 있기를 바랍니다.

예를 들어, 파이프 없이 다음을 find(1)의 단일 호출로 변환할 수 있는 방법이 있습니까?

find . [test] | xargs egrep -l [regex]

답변1

-exec명령이 0(성공)을 반환하면 "true"로 평가됩니다.

find . -type f -exec egrep -qs "regex" {} \; -print

-print원하는 작업으로 교체하세요 .


그러나 이 방법은 egrep한 번만 실행된다는 점을 고려하십시오.각 파일. 비교하다:

같음 ~/코드 $ time find -type f -exec grep -qs bin/env {} \; -인쇄 | 화장실 -l
60

실제 0분0.760초
사용자 0m0.104s
시스템 0m0.596s

같음 ~/코드 $ time find -type f -print0 | xargs -0 egrep -l bin/env | 화장실 -l
60

실제 0m0.021s
사용자 0m0.003s
시스템 0m0.023s

(300개 파일, ~2.6MB의 다소 작은 Git 저장소에서 테스트되었습니다.)

관련 정보