Saya memiliki satu direktori yang berisi puluhan direktori di dalamnya.
Saya baru untuk baris perintah dan saya berjuang untuk datang dengan perintah yang akan zip setiap sub-direktori menjadi file sub-directory.zip yang unik.
Jadi pada akhirnya direktori utama saya akan diisi dengan semua sub-direktori asli saya, ditambah .zip
file yang sesuai yang berisi konten yang di-zip dari setiap sub-direktori.
Apakah hal seperti ini mungkin? Jika demikian, tolong tunjukkan saya bagaimana melakukannya.
command-line
directory
zip
Evster
sumber
sumber
Jawaban:
Anda dapat menggunakan loop ini di
bash
:i
adalah nama dari variabel loop.*/
berarti setiap subdirektori dari direktori saat ini, dan akan menyertakan garis miring di nama-nama tersebut. Pastikan Andacd
ke tempat yang tepat sebelum menjalankan ini."$i"
cukup beri nama direktori itu, termasuk trailing slash. Tanda kutip memastikan bahwa spasi putih dalam nama direktori tidak akan menyebabkan masalah.${i%/}
seperti$i
tetapi dengan garis miring dihapus, sehingga Anda dapat menggunakannya untuk membangun nama file zip.Jika Anda ingin melihat cara kerjanya, sertakan
echo
sebelumzip
dan Anda akan melihat perintah yang dicetak alih-alih dijalankan.sumber
*/
Nama - nama setiap subdirektori langsung, bukan setiap direktori turunan. Jadi Anda hanya akan mendapatkan ritsleting untuk level paling atas, seperti yang Anda inginkan. Versi denganecho
itu akan menunjukkan aspek itu. Membuat zip setiap direktori bersarang ke dalam file sendiri sebenarnya akan lebih bermanfaat, dan mungkin sebaiknya dipecahkan dengan menggunakanfind -type d
trik-trik lain.zip
biner Anda, Anda mungkin mendapatkan perilaku yang berbeda. Untuk juga membuat file zip untuk direktori tingkat atas (yaitu anak-anak dari direktori saat ini) dimulai dengan titik, Anda dapat menggunakanshopt -s dotglob
untuk membuat pola glob cocok dengan file yang tersembunyi juga.for i in */; do (cd "$i"; zip -r "../${i%/}.zip" .); done