Jawaban:
Jika Anda benar-benar ingin mengompresnya secara paralel, Anda bisa melakukannya
for i in *zip; do unzip "$i" & done
Namun itu, akan meluncurkan proses N untuk file .zip N dan bisa sangat berat pada sistem Anda. Untuk pendekatan yang lebih terkontrol, meluncurkan hanya 10 proses paralel pada suatu waktu, coba ini:
find . -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
Untuk mengontrol jumlah proses paralel yang diluncurkan, ubah -Pke apa pun yang Anda inginkan. Jika Anda tidak ingin pengulangan ke subdirektori, lakukan ini sebagai gantinya:
find . -maxdepth 1 -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
Atau, Anda dapat menginstal paralel GNU seperti yang disarankan oleh @OleTange di komentar dan jalankan
parallel unzip ::: *zip
-execatau -execdirbukannya perpipaan ke xargs. Tidak hanya lebih sederhana untuk dipahami, tetapi juga lebih sedikit rawan kesalahan dan menggunakan lebih sedikit sumber daya sistem. find . -name '*.zip' -exec unzip {} ';'(Anda harus mengutip tanda titik koma.)
-exec \;(Anda dapat menghindari koma, tidak perlu tanda kutip), akan menjalankan setiap perintah secara berurutan. -exec +lebih baik tetapi tidak akan bekerja di sini karena itu bukan cara unzipkerjanya.
The GNU paralel perintah baik cocok untuk hal semacam ini. Setelah:
$ sudo apt-get install parallel
Kemudian
ls *.zip | parallel unzip
Ini akan menggunakan sebanyak inti yang Anda miliki, menjaga setiap inti sibuk dengan unzip, sampai semuanya selesai.
echo *.zipsebagai gantinya untuk mencegah kemungkinan alias dari menyelinap dalam info tambahan. Namun, ini memiliki masalah yang sama dengan jawaban @ Guru, itu terpecah pada nama file yang mengandung spasi.
xargsGNU Paralel tidak merusak nama file yang mengandung spasi / tab / kutipan. Hanya jika nama file berisi baris baru Anda harus lebih berhati-hati. Misalnya dengan menggunakan:parallel unzip ::: *.zip
echosama buruknya dengan menggunakan ls. Globbing dan loop sementara adalah yang paling aman.
Jika Anda memiliki banyak .zipfile di folder Anda dan Anda ingin mendekompres semuanya, buka terminal dan buka folder Anda menggunakan:
cd <path_to_folder>
Sekarang gunakan perintah ini untuk mendekompres semua .zipfile Anda :
ls *.zip | xargs -n1 unzip
echo *.zipsebagai gantinya untuk mencegah kemungkinan lsalias menyelinap di info tambahan, namun itu masih tidak memperbaiki masalah spasi putih.
lsuntuk skrip, karena outputnya tidak didefinisikan dengan baik di antara versi. Alih-alih lihat jawaban dari @terdon karena itu memecahkan semua masalah dari solusi ini.
Anda dapat menggunakan find dengan -execseperti itu,
find . -name "*.zip" -exec unzip {} \;
Ini akan berfungsi jika file memiliki spasi di namanya.
unzip \*.zip atau unzip '*.zip'
Jelas unzip *.ziptidak bekerja, karena shell mengekspansi unzip foo.zip bar.zip ...dan unzipmenafsirkan nama file pertama sebagai file zip, dan nama file berikut sebagai file untuk diekstrak dari file zip itu.
Namun, unzipagak tidak biasa di antara perintah Unix dalam melakukan ekspansi globnya sendiri. Jika *tidak diperluas oleh shell, unzip akan melakukannya, dan intepret semua nama file yang dihasilkan sebagai file zip yang akan diproses. Jadi dalam kasus khusus ini, seseorang dapat pergi tanpa forlingkaran atau xargssejenisnya.