ugrepを試してください

ugrepを試してください

私は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

答え3

これAVFS/path/to/foo.zipファイルシステムは、各アーカイブファイルがディレクトリにアクセスできるファイルシステムビューを提供します~/.avfs/path/to/foo.zip#。それヒューズSolaris にインストールできるファイルシステムです。 AVFSは、最も一般的なアーカイブファイル形式への読み取り専用アクセスを提供します。

mountavfs
for z in ~/.avfs$PWD/*.zip; do
  find "$z#" -exec grep ORA-1680 {} +
done
fusermount -u ~/.avfs   # optional

答え4

ugrepを試してください

ウグレフzip、gz、tar、tgz、bz2、lz4、zstd、pax、cpio、およびその他のタイプの圧縮ファイルとアーカイブを繰り返し検索します。オプション-z

関連情報