Yanıtlar:
Bu küçük komut dosyası, gereksinimleriniz göz önüne alındığında en iyi seçeneğiniz gibi görünüyor:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Adlarında boşluk bulunan dizinleri düzgün şekilde işler.
Buna ne dersin: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Açıklama: Geçerli dizindeki tüm öğeler üzerinde bir buluntu çalıştırırsınız. Maxdepth 0, verilen argümanlardan daha düşük olmamasını sağlar. (Bu durumda * veya geçerli dizininizdeki tüm öğeler) "-type" için "d" bağımsız değişkeni yalnızca dizinlerle eşleşir. Daha sonra exec ne olursa olsun tar çalıştırır. ({}, eşleşen dosyayla değiştirildi)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Bu, blah adlı bir dizindeki her dosya için blah.tar.gz adlı bir dosya oluşturur.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Eğer sadece dizindeki dizinlerden daha fazlasına sahipseniz (yani dosyalar da, ls dizindeki her şeyi döndürür), o zaman bunu kullanın:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
Grep -v find
komutta varsayılan olarak görünecek geçerli dizini hariç tutar .
for dir in *