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.

Michael
sumber

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)
Steeldriver
sumber
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
kencinder
sumber
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/
James Muller
sumber
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!

Atul Singh Arora
sumber