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

Jawaban:


48

Anda dapat mengeluarkan perintah:

$ unzip '*.zip'

Lihat di sini untuk referensi .


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

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

1

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

unzip -o somefiles.zip -d $directoryPath

-dmenentukan dir untuk mengekstrak ke dalam, bukan dir untuk mencari file.
LegendaryDude
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.