it-swarm-id.com

Mencari string pada banyak file Zip

Saya sedang mengerjakan SunOS 5.10. Saya memiliki folder yang berisi sekitar 200 file Zip. Setiap file Zip hanya berisi satu file teks di dalamnya. Saya ingin mencari string tertentu di semua file teks di semua file Zip.

Saya mencoba ini (yang mencari file teks dalam file Zip yang berisi string "ORA-") tetapi tidak berhasil.

zipgrep ORA-1680 *.Zip

Apa yang benar melakukannya tanpa membuka file Zip?

25
ziggy

Secara umum tidak mungkin untuk mencari konten dalam file terkompresi tanpa mengompres dengan satu atau lain cara. Karena zipgrep hanyalah sebuah shellscript, membungkus unzip dan egrep itu sendiri, Anda sebaiknya melakukannya secara manual:

for file in *.Zip; do unzip -c "$file" | grep "ORA-1680"; done

Jika Anda hanya perlu daftar file Zip yang cocok, Anda dapat menggunakan sesuatu seperti:

for file in *.Zip; do
    if ( unzip -c "$file" | grep -q "ORA-1680"); then
        echo "$file"
    fi
done

Dengan cara ini Anda hanya melakukan dekompresi ke stdout (mis. Ke memori) alih-alih mendekompres file ke disk. Anda tentu saja dapat mencoba hanya grep -a file Zip tetapi tergantung pada konten file dan pola Anda, Anda mungkin mendapatkan positif palsu dan/atau negatif palsu.

27
Noah

zipgrep mengambil satu file. Untuk membuatnya berfungsi di banyak file, letakkan dalam satu lingkaran:

for i in *.Zip
do
   zipgrep ORA-1680 "$i"
done
18
dogbane

Sistem file [~ # ~] avfs [~ # ~] menyajikan tampilan sistem file tempat setiap file arsip /path/to/foo.Zip dapat diakses sebagai direktori ~/.avfs/path/to/foo.Zip#. Ini adalah sistem file Fuse , yang dapat Anda instal pada Solaris. AVFS menyediakan akses hanya baca ke sebagian besar format file arsip.

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