Ekstrak beberapa file zip, masing-masing dalam folder baru dengan nama yang sama, melalui terminal Ubuntu


37

Saya punya banyak file zip a.zip, b.zip, c.zip, ... dan saya ingin mengekstrak masing-masing ke folder baru a, b, c, ... masing-masing, melalui terminal.

Sebenarnya, yang saya inginkan adalah solusi yang bisa saya gunakan nanti dengan findkarena saya sebenarnya punya banyak folder 2014, 2013, 2012, ... masing-masing berisi banyak file zip a.zip, b.zip, dll. Jika saya lakukan find . -name "*.zip" -exec {} unzip \;itu akan membuka ritsleting semua file dan memasukkannya ke folder induk masing-masing.


Jawaban:


72

Anda harus dapat menggunakan -dopsi unzip untuk mengatur direktori alternatif untuk konten arsip.

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

dan seterusnya. Di dalam findekspresi, Anda harus bisa mendapatkan nama untuk direktori dari nama zipfile menggunakan ekspansi parameter shell misalnya

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

Uji terlebih dahulu dengan menambahkan echomis

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

atau semacamnya

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

2
+1 untuk test it first…bagian
mrzmyr

2
findmembutuhkan direktori, jadifind . -name ...
slf

@ slf POSIXly, ya - tetapi tidak dalam kasus GNU find( "Jika tidak ada titik awal yang ditentukan, .diasumsikan." )
steeldriver

10

Saya datang mencari ini sendiri, hanya untuk menyadari bahwa saya sudah melakukannya dengan perintah lain dan itu bisa diterapkan pada hal lain, seperti saya sudah melakukannya.

Metode find ini sangat rumit tanpa alasan.

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

Ini adalah jawaban terbaik untuk pertanyaan yang ada. Yang sebelumnya konyol dan yang setelah ini tidak mengurutkan file folder masing-masing root.
TheMegolith

Bagaimana satu pergi tentang menciptakan direktori tanpa yang .zipakhiran? Meminta teman.
dashard

Jawabannya tidak membuat direktori dengan akhiran .zip, itulah bagian terpenting dari bagian dalam kurung kurawal.
kencinder

6

Cukup Gunakan

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

11
Kecuali jika saya melewatkan sesuatu, ini akan meng-unzip semuanya ke / home / user / folder, bukan ke / home / user / folder / a dan / home / user / folder / b
M. Justin

1

Saya juga perlu melakukan ini menggunakan unrar. Ini dapat dicapai dengan modifikasi kecil pada kode kencinder.

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

PS: Saya ingin menambahkan ini sebagai komentar tetapi saya tidak memiliki poin reputasi yang cukup!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.