Jawaban:
Skrip kecil ini tampaknya menjadi pilihan terbaik Anda, mengingat persyaratan Anda:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Itu benar menangani direktori dengan spasi di namanya.
Bagaimana dengan ini: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Penjelasan: Anda menjalankan pencarian pada semua item di direktori saat ini. Maxdepth 0 membuatnya tidak berulang lebih rendah dari argumen yang diberikan. (Dalam hal ini *, atau semua item dalam direktori Anda saat ini) Argumen 'd' untuk "-type" hanya cocok dengan direktori. Kemudian exec menjalankan tar pada pertandingan apa pun. ({} diganti dengan file yang cocok)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Ini akan membuat file bernama blah.tar.gz untuk setiap file dalam direktori bernama bla.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Jika Anda memiliki lebih dari sekadar direktori di direktori (yaitu file juga, karena ls akan mengembalikan semua yang ada di direktori), maka gunakan ini:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
Grep -v mengecualikan direktori saat ini yang akan muncul dalam find
perintah secara default.
for dir in *