複数の.bz2ファイルがサブディレクトリにある場合があります。そして、bzcatおよびgrepコマンドのlinuxコマンドを使用して、すべてのファイルからテキストを検索したいと思います。
次のコマンドを使用して、1対1のファイルを検索できます。
bzcat <filename.bz2> | grep -ia 'text string' | less
しかし、サブディレクトリ内のすべてのファイルに対して上記を実行する必要があります。
bzgrep
およびbzcat
の代わりにgrep
を使用できます。これはより高速です。
ディレクトリツリーで再帰的にgrepするには、find
を使用します。
find -type f -name '*.bz2' -execdir bzgrep "pattern" {} \;
find
は、拡張子が*.bz2
のすべてのファイルを再帰的に検索し、-execdir
で指定されたコマンドをそれらに適用します。
いくつかの方法があります。
bzgrep regexp $(find -name \*.bz2)
この方法は、見つかったファイルの数がそれほど多くない場合(および、パスに特殊文字が含まれていない場合)に機能します。それ以外の場合は、これを使用することをお勧めします。
find -name \*.bz2 -exec bzgrep regexp {} /dev/null \;
ご注意ください /dev/null
2番目の方法。これを使用して、bzgrep
が見つかったファイル名をregexp
に出力させます。
使用してみてください:
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
Bzcatによる修正でコードを継続します。
find . -type f -name "*.bz2" |while read file
do
bzcat $file | grep -ia 'text string' | less
done