Saya memiliki satu direktori yang berisi lusinan direktori di dalamnya.
Saya baru mengenal baris perintah dan saya kesulitan membuat perintah yang akan meng-zip setiap sub-direktori menjadi file sub-direktori.zip yang unik.
Jadi pada akhirnya direktori utama saya akan diisi dengan semua sub-direktori asli saya, ditambah .zip
yang sesuai file yang berisi konten zip setiap sub-direktori.
Apakah hal seperti ini mungkin? Jika ya, tunjukkan cara melakukannya.
Jawaban yang Diterima:
Anda dapat menggunakan loop ini di bash
:
for i in */; do zip -r "${i%/}.zip" "$i"; done
i
adalah nama variabel loop. */
berarti setiap subdirektori dari direktori saat ini, dan akan menyertakan garis miring di nama-nama itu. Pastikan Anda cd
ke tempat yang tepat sebelum menjalankan ini. "$i"
cukup beri nama direktori itu, termasuk trailing slash. Tanda kutip memastikan bahwa spasi dalam nama direktori tidak akan menyebabkan masalah. ${i%/}
seperti $i
tetapi dengan menghilangkan garis miring, Anda dapat menggunakannya untuk membuat nama file zip.
Jika Anda ingin melihat cara kerjanya, sertakan echo
sebelum zip
dan Anda akan melihat perintah dicetak alih-alih dieksekusi.
Eksekusi paralel
Untuk menjalankannya secara paralel, Anda dapat menggunakan &
:
for i in */; do zip -0 -r "${i%/}.zip" "$i" & done; wait
Kami menggunakan wait
untuk memberi tahu shell agar menunggu semua tugas latar belakang selesai sebelum keluar.
Berhati-hatilah bahwa jika Anda memiliki terlalu banyak folder di direktori Anda saat ini, Anda dapat membebani komputer Anda karena kode ini tidak membatasi jumlah tugas paralel.