各フォルダには約600個の.gzファイルを含むフォルダのリストがあり、システムは15分ごとに自動的に作成されます。 .gzファイルで繰り返される特定の文字列を表示する必要があります。文字列を含む.gzファイルを探しますか?
ベストアンサー1
topdir
すべての圧縮ファイルを含む最上位ディレクトリがあり、使用しているGNU実装を想定すると、次のようになりますzgrep
。
zgrep -R -l -F --include='*.gz' -e 'string' topdir
圧縮ファイルから部分文字列を検索しstring
、一致するすべてのファイルのパス名を返します。gzip
topdir
zgrep
GNUがないシステムではzgrep
これを使用できない可能性があります--include
。圧縮されたファイルのみを含めると問題にならないかもしれませんがtopdir
、ファイル名のサフィックスを持つファイルだけを検索したい場合は.gz
これを行うことができます。
find topdir -type f -name '*.gz' -exec zgrep -l -F -e 'string' {} +
.gz
これは、名前がunderで終わるすべての一般的なファイルを見つけ、可能な限り最大のバッチで指定されたコマンドを実行しますtopdir
。zgrep
それがなくてもzgrep
これを行うことができます。
find topdir -type f -name '*.gz' -exec sh -c '
for pathname do
if gzip -dc "$pathname" | grep -q -F -e 'string'; then
printf "%s\n" "$pathname"
fi
done' sh {} +
これは各ファイルを抽出してプレーンに渡しますgrep
。指定された文字列を含む行が見つかると、ファイルのパス名が印刷されます。
*.gz
「内部」シェルスクリプトは、単一のディレクトリ内のすべてのファイルを処理するように簡単に変更できるループです。
for pathname in ./*.gz; do
if gzip -dc "$pathname" | grep -q -F -e 'string'; then
printf "%s\n" "$pathname"
fi
done
string
部分文字列ではなく完全な単語に一致させるには、-w
上記の呼び出しに追加してくださいgrep
。正規表現として解釈するには、string
削除します-F
。