.gz ファイルリストで文字列を検索するには?

.gz ファイルリストで文字列を検索するには?

各フォルダには約600個の.gzファイルを含むフォルダのリストがあり、システムは15分ごとに自動的に作成されます。 .gzファイルで繰り返される特定の文字列を表示する必要があります。文字列を含む.gzファイルを探しますか?

ベストアンサー1

topdirすべての圧縮ファイルを含む最上位ディレクトリがあり、使用しているGNU実装を想定すると、次のようになりますzgrep

zgrep -R -l -F --include='*.gz' -e 'string' topdir

圧縮ファイルから部分文字列を検索しstring、一致するすべてのファイルのパス名を返します。gziptopdir

zgrepGNUがないシステムではzgrepこれを使用できない可能性があります--include。圧縮されたファイルのみを含めると問題にならないかもしれませんがtopdir、ファイル名のサフィックスを持つファイルだけを検索したい場合は.gzこれを行うことができます。

find topdir -type f -name '*.gz' -exec zgrep -l -F -e 'string' {} +

.gzこれは、名前がunderで終わるすべての一般的なファイルを見つけ、可能な限り最大のバッチで指定されたコマンドを実行しますtopdirzgrep

それがなくても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

おすすめ記事