2014-01-07 65 views
9

我有一個情況,其中多個.bz2文件位於子目錄中。我想使用bzcat和grep命令linux命令從所有文件中搜索文本。從.bz2文件搜索文本字符串在子目錄中回收

我可以使用下面的命令來搜索一個一個文件:

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

但是我現在我需要做上述的子目錄中的所有文件。

+0

^h試試這個命令:bzcat | grep -ira'文本字符串'|少 – archetipo

回答

17

您可以使用bzgrep而不是bzcatgrep。這更快。

到grep遞歸目錄樹中使用find

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

find遞歸搜索所有的文件與*.bz2延伸和適用與-execdir給他們指定的命令。

+0

好一個!不知道bzgrep,所以我刪除了我的方法。 – fedorqui

+1

我剛剛瞭解'zgrep',所以我嘗試了'man bzgrep'。謝謝! :) – hek2mgl

+0

感謝hek2mgl,我正在運行該命令並會讓你知道結果。我正在搜索的文件太大了。 – Semu

3

有以下幾種方法:如果發現文件的數量不是很大

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

這個方法就可以了(和它們在pathes無特殊字符)。否則你最好使用這一個:

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

在第二種方法中請注意/dev/null。你用它來使bzgrep打印文件名, 其中找到regexp

0

連續您有修復代碼的命令:bzcat:

find . -type f -name "*.bz2" |while read file 
do 
    bzcat $file | grep -ia 'text string' | less 
done 
+0

我是否將其作爲命令運行,或者我需要創建bash文件? – Semu

+0

是的,你需要將它保存在一個bash文件中,比如a.sh,然後通過執行權限:chmod + x a.sh – BMW

0

只是嘗試使用:

bzgrep --help 
grep through bzip2 files 

用法:bzgrep [grep_options] pattern [files]

例如,我需要從文件列表grep的信息號碼1941974:

'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