SunOS 5.10に取り組んでいます。約200のZipファイルを含むフォルダがあります。各Zipファイルには、テキストファイルが1つだけ含まれています。すべてのZipファイルのすべてのテキストファイルで特定の文字列を検索したいと思います。
私はこれを試しました(文字列「ORA-」を含むZipファイル内のテキストファイルを検索します)が、機能しませんでした。
zipgrep ORA-1680 *.Zip
Zipファイルを解凍せずにそれを行う正しい方法は何ですか?
一般に、何らかの方法で圧縮解除しないと、圧縮ファイル内のコンテンツを検索することはできません。 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
この方法では、ファイルをディスクに解凍するのではなく、標準出力(つまりメモリ)に解凍するだけです。もちろん、grep -a
Zipファイルですが、ファイルの内容とパターンによっては、誤検知や誤検知が発生する場合があります。
zipgrep
は単一のファイルを取ります。複数のファイルで機能させるには、ループに入れます。
for i in *.Zip
do
zipgrep ORA-1680 "$i"
done
[〜#〜] avfs [〜#〜] ファイルシステムは、すべてのアーカイブファイル/path/to/foo.Zip
はディレクトリとしてアクセス可能です~/.avfs/path/to/foo.Zip#
。これは Fuse ファイルシステムで、Solarisにインストールできます。 AVFSは、最も一般的なアーカイブファイル形式への読み取り専用アクセスを提供します。
mountavfs
for z in ~/.avfs$PWD/*.Zip; do
find "$z#" -exec grep ORA-1680 {} +
done
fusermount -u ~/.avfs # optional