Membuka ritsleting kumpulan file

33

Ketika saya mencoba

 unzip filename.zip

berhasil. Namun, saya perlu meng-unzip serangkaian file zip.

Mengapa:

 find . -name "*.zip" -print0 | xargs -0 unzip

atau

 ls *.zip | xargs unzip

tidak bekerja?

Dalam kedua kasus saya mendapatkan pesan "peringatan: nama file tidak cocok:".

jeannoburto
sumber

Jawaban:

48

Anda dapat mengeluarkan perintah:

$ unzip '*.zip'

Lihat di sini untuk referensi .

vfbsilva
sumber
Saya tidak mengatakannya dengan jelas, tetapi mereka tidak semua berada di direktori yang sama. Jadi, saya butuh output dari find.
jeannoburto
4
Terima kasih. Ini mungkin cocok dengan pertanyaan aktual tetapi ini memecahkan masalah saya. Saya mencoba unzip *dan mengembalikan caution: filename not matcheduntuk setiap file tetapi unzip '*.zip'melakukan pekerjaan.
Ivan
27

Perintah Anda tidak berfungsi karena mereka memasukkan semua file ke baris perintah yang sama. Sementara itu bekerja dengan sebagian besar program, unzipakan mengambil argumen pertama sebagai file zip, dan apa pun setelah yang pertama sebagai file untuk diekstrak darinya. Anda perlu menjalankan perintah satu kali untuk setiap file:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

Atau

find . -name '*.zip' -exec unzip {} \;
Kevin
sumber
Yang kedua tampaknya lebih baik kalau-kalau ada banyak file. (Kalau tidak, ia mengeluh perintahnya terlalu lama dengan xargs)
Recct
5

Dalam bash Anda juga bisa melakukan hal berikut:

for i in *.zip; do
    unzip "$i"
done

Juga unzipdapat -dberalih sehingga Anda dapat menargetkan output ke lokasi yang berbeda.

Sebagai contoh:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done
slm
sumber
1

Ada solusi yang jauh lebih mudah daripada yang berulang di atas, gunakan -dbendera direktori :

unzip -o somefiles.zip -d $directoryPath
Aditya Mittal
sumber
-dmenentukan dir untuk mengekstrak ke dalam, bukan dir untuk mencari file.
LegendaryDude