Bir toplu iş dosyası açmak


33

Denediğimde

 unzip filename.zip

işe yarıyor. Ancak bir dizi zip dosyasını açmam gerekiyor.

Neden:

 find . -name "*.zip" -print0 | xargs -0 unzip

veya

 ls *.zip | xargs unzip

çalışmıyor?

Her iki durumda da "dikkat: dosya adı eşleşmedi:" mesajı alıyorum.

Yanıtlar:


48

Komutu verebilirsiniz:

$ unzip '*.zip'

Referans için buraya bakın .


Açıkça söylemedim, ama hepsi aynı dizinde değil. Yani, bulgunun çıktısına ihtiyacım var.
jeannoburto

4
Teşekkürler. Bu, asıl soruya mükemmel bir şekilde uyuyor olabilir ama bu benim sorunumu çözdü. Deniyordum unzip *ve caution: filename not matchedher dosya için geri döndü , ancak unzip '*.zip'işi yaptı.
Ivan

27

Komutlarınız çalışmıyor çünkü tüm dosyaları aynı komut satırına dolduruyorlar. Bu çoğu programla unzipçalışsa da, ilk argümanı zip dosyası olarak alır ve ilkinden sonra çıkartılacak dosyalar olarak alır. Komutu her dosya için bir kez çalıştırmanız gerekir:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

Veya

find . -name '*.zip' -exec unzip {} \;

Gerçekten çok fazla dosya olması durumunda ikincisi daha iyi görünüyor. (Aksi halde, komutun xargs ile çok uzun olduğundan şikayet etti)
15'de

5

Bash'ta aşağıdakileri de yapabilirsiniz:

for i in *.zip; do
    unzip "$i"
done

Ayrıca unzip, -danahtarı alabilir, böylece çıktıyı farklı konumlara hedefleyebilirsiniz.

Örneğin:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done

1

Yukarıda verilen döngüden çok daha kolay bir çözüm var, dizin -dişaretini kullanın :

unzip -o somefiles.zip -d $directoryPath

-dDosyalarda aranacak dizini değil, içine alınacak dizini belirtir.
LegendaryDude
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.