답변:
@Steve Weet이 거의 있습니다. 추가 인수로 / dev / null을 사용하는 것은 파일 이름을 표시하도록하는 좋은 방법입니다 (Steve 덕분에 기억합니다). 그러나 여전히 발견 된 모든 파일에 대해 exec를 실행합니다.
가능한 한 몇 번 zgrep을 실행하여 각 실행을 최대한 활용하고 싶습니다.
find . -iname '*.gz' -print0 | xargs -0 zgrep PATTERN
xargs
zgrep에 가능한 많은 args (파일 이름)를 제공하고 find
명령이 제공 한 모든 파일을 사용할 때까지 반복적으로 실행합니다 . 은 Using -print0
및 -0
파일이나 디렉토리 이름의 공백이있는 경우 옵션은 작업에 있습니다.
Mac OS X에서는 xargs없이 동일한 효과를 얻을 수 있습니다.
find . -iname '*.gz' -exec zgrep PATTERN {} +
-H
GNU grep에서 파일 이름을 항상 일치하는 줄과 함께 표시하는 데 사용하십시오 .
$ zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.
그래서 같은
find . -iname "*.gz" -exec zgrep PATTERN {} \
zgrep -r
나무를 통과하거나 -r이 작동하지 않는 경우 검색 결과를 파이프로 연결하는 것이 좋습니다.xargs zgrep
/bin/zgrep: -r: option not supported
내 새로 설치된 우분투 시스템.
xargs
대신 사용할 수 있습니다 .
@aioobe가 거의 있습니다. 명령은 작업을 수행하지만 파일 이름을 알려주지 않습니다.
다음은 파일 이름도 알려줍니다.
find . -iname "*.gz" -exec zgrep PATTERN {} /dev/null \;
추가 /dev/null
하면 zgrep에서 두 개의 파일 이름을 볼 수 있으므로 문자열을 찾으면 파일 이름이 표시됩니다.
편집하다
추가 연구에 따르면 내 컴퓨터 (OS / X)의 경우 -exec
찾을 인수에 따라 가능한 많은 파일 이름이 추가됩니다 ( xargs
동작 방식과 유사 ).
find
아니지만 대부분의 최신 버전 (예 : 데비안 기반 배포판)입니다.
-H
적어도 /dev/null
해킹 대신 GNU grep에서 일치하는 줄을 가진 파일 이름을 항상 표시하는 데 사용하십시오 .