Ubuntu terminali aracılığıyla her biri aynı adı taşıyan yeni bir klasördeki birkaç zip dosyasını çıkarın


36

Çok sayıda zip dosyası var: a.zip, b.zip, c.zip, ... ve bunların her birini sırasıyla a, b, c, ... yeni klasörlerine terminal üzerinden çıkarmak istiyorum .

Aslında istediğim, daha sonra kullanabileceğim bir çözüm. findÇünkü 2014, 2013, 2012 gibi birçok klasörüm var ; bunların her birinde birçok zip dosyası var. A.zip, b.zip, vs. find . -name "*.zip" -exec {} unzip \;tüm dosyaları açacak ve ilgili üst klasörlerine koyacaktır.


Yanıtlar:


70

-dArşiv içeriği için alternatif bir dizin ayarlamak için unzip'in seçeneğini kullanabilmelisiniz .

unzip -d a a.zip
unzip -d b b.zip

ve bunun gibi. Bir findifadede, kabuk parametresi genişletmesini kullanarak dizinin adını zip dosyası adından türetebilmeniz gerekir;

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

Önce bir echoie ekleyerek test edin

find -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;

ya da benzeri bir şey

while read -rd $'\0' f; do 
  unzip -d "${f%.*}" "$f"
done < <(find -name '*.zip' -print0)

1
test it first…Parça için +1
mrzmyr

2
findbir dizine ihtiyacı var, yanifind . -name ...
slf

@slf POSIXly, evet - ancak GNU durumunda değil find( "Başlangıç ​​noktası belirtilmemişse .varsayılır." )
steeldriver

10

Bunu kendim aramaya geldim, sadece daha önce başka komutlarla yaptığımı ve daha önce yaptığım gibi başka bir şey için de uygulanabileceğini anlamak için geldim.

Bulma yöntemi, sebepsiz yere aşırı karmaşık.

for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done

Bu, eldeki soruya en iyi cevabı eller aşağı. Birincisi saçma ve bundan sonraki kök dizin dosyalarına ayrılmaz.
Mogolith

Nasıl bir dizin oluşturma hakkında gitmek olmadan.zip soneki? Bir arkadaş için soruyorum.
dashard

Cevap bir .zip sonekine sahip bir dizin oluşturmaz, bu da parantez içindeki kısmın noktasıdır.
kencinder

6

Basitçe kullanın

unzip '*.zip' -d /home/user/folder/

10
Bir şeyi kaçırmazsam, bu, / home / user / klasörüne değil , / home / user / klasörüne / a / / / home / user / klasörüne / b ' sıyla her şeyi açacaktır
M. Justin

0

Bunu unrar kullanarak da yapmam gerekiyordu. Bu kencinder kodunda küçük bir değişiklikle yapılabilir.

for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done 

Not: Bunu bir yorum olarak eklemek istedim ama yeterli itibar puanım yok!

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.