web-dev-qa-db-ja.com

Linuxは、サブディレクトリ内の.bz2ファイルからテキスト文字列を再帰的に検索します

複数の.bz2ファイルがサブディレクトリにある場合があります。そして、bzcatおよびgrepコマンドのlinuxコマンドを使用して、すべてのファイルからテキストを検索したいと思います。

次のコマンドを使用して、1対1のファイルを検索できます。

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

しかし、サブディレクトリ内のすべてのファイルに対して上記を実行する必要があります。

13
Semu

bzgrepおよびbzcatの代わりにgrepを使用できます。これはより高速です。

ディレクトリツリーで再帰的にgrepするには、findを使用します。

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

findは、拡張子が*.bz2のすべてのファイルを再帰的に検索し、-execdirで指定されたコマンドをそれらに適用します。

26
hek2mgl

いくつかの方法があります。

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

この方法は、見つかったファイルの数がそれほど多くない場合(および、パスに特殊文字が含まれていない場合)に機能します。それ以外の場合は、これを使用することをお勧めします。

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

ご注意ください /dev/null2番目の方法。これを使用して、bzgrepが見つかったファイル名をregexpに出力させます。

4
Igor Chubin

使用してみてください:

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

2
Anton Shtin

Bzcatによる修正でコードを継続します。

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