Unix 'grep' 用于所有子目录中所有 gzip 文件中的字符串

8 unix grep

如何通过.gz所有目录和子目录中的所有文件递归地搜索字符串?

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)


aio*_*obe 1

$ 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)