Ste*_*n P 13
@Steve Weet 快到了。使用 /dev/null 作为附加参数是强制显示文件名的好方法(我会记住这一点,谢谢史蒂夫)但它仍然为找到的每个文件运行 exec —— 一个巨大的开销。
您希望尽可能少地运行 zgrep,以充分利用每次执行:
find . -iname '*.gz' -print0 | xargs -0 zgrep PATTERN
Run Code Online (Sandbox Code Playgroud)
xargs
将为 zgrep 提供尽可能多的参数(文件名),并重复执行它,直到它使用了find
命令提供的所有文件。如果任何文件或目录名称中有空格,则使用-print0
和-0
选项允许它工作。
在 Mac OS X 上,不用 xargs 也能达到同样的效果:
find . -iname '*.gz' -exec zgrep PATTERN {} +
Run Code Online (Sandbox Code Playgroud)
$ 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.
Run Code Online (Sandbox Code Playgroud)
所以像
find . -iname "*.gz" -exec zgrep PATTERN {} \
Run Code Online (Sandbox Code Playgroud)