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

时间:2014-01-07 11:34:12

标签: linux recursion grep bzip2

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

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

bzcat <filename.bz2> | grep -ia 'text string' | less

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

4 个答案:

答案 0 :(得分:22)

您可以使用bzgrep代替bzcatgrep。这更快。

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

find -type f -name '*.bz2' -execdir bzgrep "pattern" {} \;

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

答案 1 :(得分:4)

有几种方法:

bzgrep regexp $(find -name \*.bz2)

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

find -name \*.bz2 -exec bzgrep regexp {} /dev/null \;

请注意第二种方法中的/dev/null。你用它来bzgrep打印文件名, 找到regexp的地方。

答案 2 :(得分:1)

试着使用:

bzgrep --help
grep through bzip2 files

用法: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'

我该怎么办?

bzgrep '1941974' billing_log_1

答案 3 :(得分:0)

使用bzcat:

修复代码
find . -type f -name "*.bz2" |while read file
do 
    bzcat $file | grep -ia 'text string' | less
done