Linux在子目录中以递归方式搜索.bz2文件中的文本字符串

Sem*_*emu 12 linux recursion grep bzip2

我有一个案例,其中多个.bz2文件位于子目录中.我想使用bzcat和grep命令linux命令从所有文件中搜索文本.

我可以使用以下命令搜索一个文件:

bzcat <filename.bz2> | grep -ia 'text string' | less
Run Code Online (Sandbox Code Playgroud)

但我现在需要对子目录中的所有文件执行上述操作.

hek*_*mgl 24

您可以使用bzgrep而不是bzcatgrep.这更快.

要在目录树中递归grep,请使用find:

find -type f -name '*.bz2' -execdir bzgrep "pattern" {} \;
Run Code Online (Sandbox Code Playgroud)

find正在递归搜索具有*.bz2扩展名的所有文件,并将指定的命令应用于-execdir它们.


Igo*_*bin 5

有以下几种方法:

bzgrep regexp $(find -name \*.bz2)
Run Code Online (Sandbox Code Playgroud)

如果找到的文件数量不是很大(并且它们的路径中没有特殊字符),则此方法将起作用。否则你最好使用这个:

find -name \*.bz2 -exec bzgrep regexp {} /dev/null \;
Run Code Online (Sandbox Code Playgroud)

请注意/dev/null第二种方法。您可以使用它来bzgrep打印找到该文件的文件名regexp


小智 5

只需尝试使用:

bzgrep --help
grep through bzip2 files
Run Code Online (Sandbox Code Playgroud)

用法:bzgrep [grep_options] pattern [files]

例如,我需要从编号为 1941974 的文件列表中获取 grep 信息:

'billing_log_1.bz'
'billing_log_2.bz'
'billing_log_3.bz'
'billing_log_4.bz'
'billing_log_5.bz'
Run Code Online (Sandbox Code Playgroud)

我能做些什么?

bzgrep '1941974' billing_log_1