Bagaimana cara membuat daftar isi dari semua file .zip di folder dan grep untuk file tertentu?

28

Saya memiliki 348 file zip dan saya ingin menemukan file yang ada di salah satu file zip, unzip -ltidak berfungsi dengan wild card?

Bagaimana saya bisa mendaftar konten semua .zipfile dan grepmelalui daftar gabungan semua file yang terkandung dalam zip?

Eduard Florinescu
sumber

Jawaban:

17

Menggunakan zipinfoadalah solusi yang bagus di sini. Namun, secara umum setiap kali Anda ingin menerapkan perintah ke daftar file dan perintah itu tidak menerima daftar file, Anda bisa menggunakan forloop:

for file in *.zip; do
    unzip -l "$file"
done \
| grep "\.zip\|setup"

Jika file yang Anda cari memiliki spasi di dalamnya seperti your file:, dalam ekspresi reguler grep Anda harus keluar dari setiap spasi dengan backslash like grep "\.zip\|your\ file".

Konrad Rudolph
sumber
Bekerja dengan sempurna satu-satunya masalah adalah tidak menunjukkan nama zip,
Eduard Florinescu
Saya mengedit posting Anda dan menambahkan ekspresi reguler untuk menampilkan juga nama file tempat setup ditemukan, +1 dan menerima
Eduard Florinescu
Oh ya, saya lupa tanda kutip di sekitar argumen unzip, betapa memalukannya.
Konrad Rudolph
1
@JaySullivan Jangan gunakan kode ini, itu akan gagal untuk jalur yang berisi spasi. Jangan pernah menyalurkan output ls. Anda bisa menggunakannya findsebagai gantinya.
Konrad Rudolph
12

Anda bisa menggunakannya zipinfo. Itu termasuk dalam instalasi Ubuntu default. Periksa halaman manual untuk info lebih lanjut.

Misalnya, untuk mencari pola setupdi banyak file zip di direktori saat ini, gunakan perintah ini:

find ./ -iname *zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup
Anwar
sumber
Saya mendapatkan caution: filename not matched: case1.zip... caution: filename not matched: case348.zipuntuk setiap zip, diuji pada dua OS Ubuntu, 11.10 dan 12.04.
Eduard Florinescu
@EduardFlorinescu Cobalah jawaban yang diperbarui. Meskipun jawabannya bekerja untuk saya
Anwar
masalahnya adalah bahwa file tersebut mungkin berisi itu setupdan menempatkan kesalahan yang sama, meskipun berfungsi seperti ini:zipinfo -l * | grep "setup"
Eduard Florinescu
Saya mengedit jawabannya. Saya pikir itu lebih kuat sekarang
Anwar
1
Terima kasih, +1 atas upaya, tetapi tetap saja tidak akan berfungsi jika file zip memiliki spasi dalam namanya.
Eduard Florinescu
6

Untuk membuat daftar file dalam arsip zip Anda dapat menggunakan perintah berikut.

unzip -l

Untuk mendapatkan arsip terkompresi, Anda harus menggunakan utilitas arsip terkompresi yang dibangun untuk bekerja dengan jenis format arsip itu.

Untuk arsip zip:

zipgrep --help  
usage: zipgrep [egrep_options] pattern zipfile [members...]
Uses unzip and egrep to search the zip members for a string or pattern.

Untuk arsip tar:

zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.

OPTIONs are the same as for 'grep'.

Ada beberapa alat lain yang berfungsi dengan arsip juga. Anda dapat menyalurkan pipa keluar ke grep untuk melakukan hal yang sama.

zcat
zcat my.archive.zip | grep "some text"

Atau Anda dapat menggunakan fungsi pencarian dari alat-alat ini

zless
zmore
nelaaro
sumber