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.

Jawaban:


395

Ini berfungsi dalam bash, menurut tautan ini :

unzip \ *. zip


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"

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

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 {} \;

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?


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.


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.


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

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


2

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


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)


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

-2
for i in `ls *.zip`; do unzip $i; done

14
Penggunaan berbahaya ls. Bagaimana jika Anda memiliki file bernama "-j -o -d .. jackass.zip"
geocar


-3

Menggunakan

sudo apt-get install unzip 

unzip file.zip -d path_to_destination_folder

untuk membuka zip folder di linux


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
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.