Bir klasördeki tüm .zip dosyalarının içeriği nasıl listelenir ve belirli bir dosya için grep nasıl kullanılır?


28

348 zip dosyam var ve zip dosyalarından birinde olan, unzip -ljoker kartlarla çalışmayan bir dosyayı bulmak istiyorum.

Tüm .zipdosyaların içeriğini grepve fermuarlarda bulunan tüm dosyaların birleştirilmiş listesini nasıl listeleyebilirim?

Yanıtlar:


17

Burada kullanmak zipinfoiyi bir çözümdür. Ancak, genel olarak bir dosya listesine komut uygulamak istediğinizde ve komut bir dosya listesini kabul etmediğinde, bir fordöngü kullanabilirsiniz :

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

Eğer aradığınız dosyanın içinde boşluklar varsa: your filegrep normal ifadesinde, her boşluktan bir ters eğik çizgi ile çıkmanız gerekir grep "\.zip\|your\ file".


Mükemmel çalışır tek sorun zip adını göstermemesidir,
Eduard Florinescu 5:12

Siz de
kurgunuzu

Oh evet, tartışmanın etrafındaki alıntıları unzip, ne kadar utanç verici olduğunu unuttum .
Konrad Rudolph

1
@JaySullivan Bu kodu kullanmayın, boşluk içeren yollar için başarısız olur. Asla ls çıkışını yöneltmeyin. Sen olabilir kullanmak findyerine.
Konrad Rudolph

12

Kullanabilirsiniz zipinfo. Varsayılan Ubuntu kurulumuna dahil edilmiştir. Kontrol kılavuz sayfasını daha fazla bilgi için.

Örneğin, setupgeçerli dizindeki bir sürü zip dosyasındaki bir deseni aramak için bu komutu kullanın:

find ./ -iname *zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup

Ben olsun caution: filename not matched: case1.zip... caution: filename not matched: case348.zipiki Ubuntu işletim, 11.10 ve 12.04 üzerinde test her zip için.
Eduard Florinescu

@EduardFlorinescu Güncelleştirilmiş cevabı deneyin. Cevap benim için çalışıyor olmasına rağmen
Anwar

Sorun şu ki, dosyayı içerebilir setupve bu şekilde zipinfo -l * | grep "setup"
çalışsa

Cevabı değiştirdim. Şimdi daha güçlü olduğunu düşünüyorum
Anwar

1
Teşekkürler, çaba için + 1, ancak zip dosyası adında boşluk varsa yine de çalışmayacak.
Eduard Florinescu

6

Dosyaları bir zip arşivinde listelemek için aşağıdaki komutu kullanabilirsiniz.

unzip -l

Sıkıştırılmış bir arşivi greplemek için, bu tür arşiv biçimiyle çalışmak üzere oluşturulmuş sıkıştırılmış arşiv yardımcı programlarını kullanmalısınız.

Zip arşivleri için:

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

Katran arşivleri için:

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'.

Arşivlerle çalışan başka birkaç araç var. Aynı şeyi yapmak için boruyu grep içine sokabilirsiniz.

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

Veya bu araçların arama işlevini kullanabilirsiniz

zless
zmore
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.