多数の.gz
ファイルを含むディレクトリ階層があります。文字列「foo」に対して再帰的にgrepできるようにしたい。私がオンラインで読んだことから、以下が機能するはずです:
zgrep -R -H "foo" .
ただし、これは結果を返しません。ドットをファイルの名前に置き換えても機能します。例えば、
zgrep -R -H "foo" myFile.gz
ただし、明らかに、これは再帰的ではなくなります。
次のコマンドは多くの結果を返すため、一部のファイルに「foo」が含まれていることがわかります。
find . -iname "*.gz" | xargs zgrep "output" | less
再帰的なzgrepコマンドが機能しない理由を誰かが知っていますか? RHEL Linuxボックスにいます
私が通常行う方法は次のとおりです。
zgrep "foo" $(find -name "*.gz")
そのコマンドが「引数リストが長すぎます」を返す場合は、次の方法を試してください。
for I in $(find -name "*.gz"); do zgrep "foo" $I; done
あなたのほとんどそこに。これを試して:
zgrep -R -H "foo" *.gz
編集:うーん....興味をそそる!
私のzgrepによれば、-R(再帰的)はオプションではありません。単にサポートされていません。あなたのzgrepのmanページが何を言っているかを確認するためのIDがあります。
サブディレクトリの1つのレベルのみに依存する1つの代替策は、これを行うことです。
zcat */*.gz | grep <needle>
しかし、私はあなたのfindコマンドがおそらくより良いことをお勧めします!
Zutilsをインストールする必要があります。これにより、システムのデフォルトの制限されたzgrepが再帰可能なzgrepに置き換えられます。
Debianベースのシステムではapt-get install zutils
を実行すると、zgrep -rH myword .
を実行して、知っているgrepの他のほとんどのパラメーターを使用できます。
sift を使用します- super-fast です。
sift -z foo
-z
はgzipを解凍するためのもので、デフォルトではサブディレクトリに格納されます。デフォルトでファイル名も表示します(your -H
オプション)。
PS。あなたの質問のおかげで、今日このツールを発見しました。必要な機能を除いて、それをバトルテストしただけですが、zgrep
と比較すると、一部の本番ログで5倍のスピードアップがあります。