2011-06-02 6 views
11

Zip dosyaları ile dolu bir dizinim var. Her biri 'files1.zip' gibi bir şey çağırdı. İçgüdüm, her dosyayı açmak için bir bash for the loop kullanmaktır.Tek bir komutu, bir dizindeki her dosyayı, dosya ile aynı ada sahip yeni ve benzersiz bir dizinde ayıklamak için nasıl kullanabilirim?

Sorun şu ki, birçok dosya kendi içeriklerini doğrudan ana dizine ayırır, daha sonra her şeyi kendi benzersiz dizinlerine açar. Bende çorba çorbası alıyorum.

'files1.zip' dosyasının tüm dosyalarını 'files1' adlı bir dizine döktüğünden emin olmak isterim.

Ek olarak, dosya adlarından bazılarında boşluk vardır.

Bunu nasıl yapabilirim?

Teşekkürler.

+0

İlgili: [http://stackoverflow.com/q/2463874/435605](http://stackoverflow.com/q/2463874/435605 –

cevap

14
for f in *.zip; do 
    dir=${f%.zip} 

    unzip -d "./$dir" "./$f" 
done 
0

Farklı bir dizine açmak için -d tuşlarını kullanabilirsiniz.

for file in `echo *.zip`; do 
    [[ $file =~ ^(.*)\.zip$ ]] 
    unzip -d ${BASH_REMATCH[1]} $file 
done 
+0

'echo * .zip' boşluk içeren zip dosyası adları için çalışmaz. – Neil

+4

Neden sadece * .zip; yap ...; done'? –

1

Basit bir liner

$ for file in `ls *.zip`; do unzip $file -d `echo $file | cut -d . -f 1`; done