다른 프로그램의 출력 또는 종료 코드를 기반으로 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 저장소에서 테스트되었습니다.)