Buka zip semua file di direktori

203

Saya memiliki direktori file ZIP (dibuat di mesin Windows). Saya dapat membuka ritsletingnya secara manual menggunakan unzip filename, tetapi bagaimana saya bisa membuka ritsleting semua file ZIP di folder saat ini melalui shell?

Menggunakan Ubuntu Linux Server.

Lennie De Villiers
sumber

Jawaban:

395

Ini berfungsi dalam bash, menurut tautan ini :

unzip \ *. zip

ChristopheD
sumber
2
Saya membutuhkan backslash dengan Zsh . Saya tidak tahu alasan mengapa Anda membutuhkannya jika Anda menggunakan Bash.
Don McCurdy
Apa yang akan terjadi dengan file duplikat? Saya kira itu hanya akan menimpa?
kerner1000
Bekerja sangat baik di macOS 😀
Ahi Tuna
1
Ketika melakukan ini, saya mendapatkan nama file yang tidak cocok untuk semua file zip di direktori
thebeancounter
1
Versi dengan kutipan bekerja untuk saya di WSL. Nama file juga memiliki spasi di dalamnya, FWIW.
Max Candocia
107

Masukkan beberapa kutipan untuk keluar dari wildcard:

unzip "*.zip"
ghostdog74
sumber
2
+1 Yang ini bekerja untuk saya. Saya harus membuka zip nama file dengan format tertentu sambil membatasi sisanya. Saya hanya menyimpan format yang cocok dalam tanda kutip ganda dan itu bekerja seperti pesona. Output memberi tahu saya jumlah arsip yang berhasil diproses.
Lalit Kumar B
Bekerja dengan baik pada subsistem Ubuntu untuk Windows, 11/18/2018. Jawaban teratas tidak berhasil.
julianstanley
64

Script bash berikut mengekstrak semua file zip di direktori saat ini ke direktori baru dengan nama file file zip, yaitu:

File-file berikut:

myfile1.zip
myfile2.zip 

Akan diekstraksi ke:

./myfile1/files...
./myfile2/files...

Script shell:

#!/bin/sh
for zip in *.zip
do
  dirname=`echo $zip | sed 's/\.zip$//'`
  if mkdir "$dirname"
  then
    if cd "$dirname"
    then
      unzip ../"$zip"
      cd ..
      # rm -f $zip # Uncomment to delete the original zip file
    else
      echo "Could not unpack $zip - cd failed"
    fi
  else
    echo "Could not unpack $zip - mkdir failed"
  fi
done
HUBUNGI19
sumber
4
Ini adalah hal untuk menaklukkan semua hal. Tidak percaya itu tidak dipilih lebih tinggi
billynoah
Ini tidak berurusan dengan spasi dalam nama file.
David Oliver
1
Tambahkan saja kutipan "ke nama file
CONvid19
1
`menyelamatkan hari saya! Terima kasih! Saya melakukan beberapa loop, unzip, melakukan suatu tindakan, menyalin, menangkap sesuatu, menghapus. Yang hilang adalah bagaimana cara pergi dari file.gz ke file sebagai variabel dalam skrip bash
thahgr
38

unzip * .zip, atau jika mereka ada di subfolder, maka kira-kira seperti itu

find . -name "*.zip" -exec unzip {} \;
Phatmanace
sumber
unzip melakukan pemrosesan wildcard sehingga file yang disebut "* .zip" tidak akan melakukan apa yang Anda harapkan.
geocar
3
Sebenarnya ini akan melakukan apa yang diharapkan, hasil operasi find dilewatkan ke unzip
John Bargman
1
Ini akan mengekstrak semua file zip dalam direktori saat ini, bagaimana jika saya ingin file zip (yang ada di subfolder) diekstraksi di masing-masing subfolder?
Rishabh Agrahari
2
@RishabhAgrahari Saya menyampaikan komentar Anda dalam jawaban baru .
jojo
untuk gzip'edfile, gunakan gunzip -rfk .untuk membuka ritsleting rekursif di dalam folder masing-masing
Devaroop
17

Buka zip semua .zipfile dan simpan konten di folder baru dengan nama yang sama dan folder yang sama dengan .zipfile:

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

Ini adalah perpanjangan dari jawaban @ phatmanace dan alamat komentar @ RishabhAgrahari :

Ini akan mengekstrak semua file zip dalam direktori saat ini, bagaimana jika saya ingin file zip (yang ada di subfolder) diekstraksi di masing-masing subfolder?

jojo
sumber
1
untuk gzip'edfile, gunakan gunzip -rfk .untuk membuka ritsleting rekursif di dalam folder masing-masing
Devaroop
2
Mendapatkan find: illegal option -- nmenggunakan UnZip 6.00 - orang lain?
DannyDannyDanny
find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;Anda lupa daftar direktori.
SaundersB
16
for i in *.zip; do
  newdir="${i:0:-4}" && mkdir "$newdir"
  unzip "$i" -d  "$newdir"
done

Ini akan membuka zip semua arsip zip ke folder baru bernama dengan nama file arsip zip.

a.zip b.zip c.zipakan membuka ritsleting ke a b cfolder masing-masing.

Jahid
sumber
6

aunpack -e *.zip, dengan atoolterpasang. Memiliki keunggulan karena berurusan dengan kesalahan secara cerdas, dan selalu membongkar ke dalam subdirektori kecuali zip hanya berisi satu file. Dengan demikian, tidak ada bahaya mencemari direktori saat ini dengan banyak file, seperti yang ada unzippada zip tanpa struktur direktori.

kampu
sumber
6

Di setiap shell POSIX, ini akan membuka zip ke direktori berbeda untuk setiap file zip:

for file in *.zip
do
    directory="${file%.zip}"
    unzip "$file" -d "$directory"
done
Jeff Fisher
sumber
1
Atau sebagai one-liner: for file in *.zip; do unzip "$file" -d "${file%.zip}"; done
peterflynn
2

Gunakan ini:

for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
done
Ankit Malhotra
sumber
2

for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done

Anurag Dalia
sumber
1
Bagus untukku. Unzip di masing
letakkan
Lebih aman melakukannya dengan for file in *.zip; do ...benar?
peterflynn
1

Jika file tersebut gzip'd. Kemudian gunakan saja:

gunzip -rfk .

dari direktori root untuk mengekstrak file di direktori masing-masing secara rekursif dengan menyimpan yang asli (atau menghapus -kuntuk menghapusnya)

Devaroop
sumber
0

Ini adalah varian dari jawaban Pedro Lobito menggunakan Cara untuk mengulang melalui direktori secara rekursif untuk menghapus file dengan ekstensi ekstensi ajaran:

shopt -s globstar
root_directory="."

for zip_file_name in **/*.{zip,sublime\-package}; do
    directory_name=`echo $zip_file_name | sed 's/\.\(zip\|sublime\-package\)$//'`
    printf "Unpacking zip file \`$root_directory/$zip_file_name\`...\n"

    if [ -f "$root_directory/$zip_file_name" ]; then
        mkdir -p "$root_directory/$directory_name"
        unzip -o -q "$root_directory/$zip_file_name" -d "$directory_name"

        # Some files have the executable flag and were not being deleted because of it.
        # chmod -x "$root_directory/$zip_file_name"
        # rm -f "$root_directory/$zip_file_name"
    fi
done
pengguna
sumber
-2
for i in `ls *.zip`; do unzip $i; done
Dominik
sumber
14
Penggunaan berbahaya ls. Bagaimana jika Anda memiliki file bernama "-j -o -d .. jackass.zip"
geocar
-2

Untuk membuka zip semua file dalam direktori cukup ketik cmd ini di terminal:

unzip '*.zip'
Yacine ELgoub
sumber
jawaban ini adalah duplikat dari stackoverflow.com/a/2376135/6948900
Mikhail Antonov
-3

Menggunakan

sudo apt-get install unzip 

unzip file.zip -d path_to_destination_folder

untuk membuka zip folder di linux

Mohit Singh
sumber
Ini hanya akan unzip file tunggal. Pertanyaannya adalah unzip semua folder
Vivek Panday
Agar adil, judul "Unzip All Files In A Directory" bisa ambigu dan juga berarti "Unzip arsip tunggal ke direktori terpisah".
jdersen