私はSunOS 5.10を開発しています。約200個のzipファイルを含むフォルダがあります。各zipファイルには1つのテキストファイルしか含まれていません。すべてのzipファイルのすべてのテキストファイルから特定の文字列を検索したいと思います。
これを試しましたが、文字列 "ORA-"を含むテキストファイルのzipファイルを検索しますが、動作しません。
zipgrep ORA-1680 *.zip
zipファイルを解凍せずにこれを行う正しい方法は何ですか?
答え1
通常、何らかの方法で解凍しないと、圧縮ファイルの内容を取得できません。 zipgrepはunzipとegrep自体をラップするシェルスクリプトなので、手動で実行することもできます。
for file in *.zip; do unzip -c "$file" | grep "ORA-1680"; done
一致するzipファイルのリストだけが必要な場合は、次の方法を使用できます。
for file in *.zip; do
if ( unzip -c "$file" | grep -q "ORA-1680"); then
echo "$file"
fi
done
これにより、ファイルをディスクに解凍するのではなく、標準出力(メモリなど)にのみ解凍できます。もちろん、zipファイルのみを使用してみることもできますが、grep -a
ファイルの内容とパターンによっては、偽の肯定および/または偽の否定が発生する可能性があります。
答え2
zipgrep
ファイルが必要です。複数のファイルで動作させるには、ループに入れます。
for i in *.zip
do
zipgrep ORA-1680 "$i"
done