Odpowiedzi:
Ten mały skrypt wydaje się najlepszą opcją, biorąc pod uwagę twoje wymagania:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Prawidłowo obsługuje katalogi ze spacjami w ich nazwach.
Co powiesz na to: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Objaśnienie: Uruchomisz wyszukiwanie na wszystkich elementach w bieżącym katalogu. Maxdepth 0 sprawia, że nie będzie się powtarzać niżej niż podane argumenty. (W tym przypadku * lub wszystkie elementy w bieżącym katalogu) Argument „d” dla „-type” pasuje tylko do katalogów. Następnie exec uruchamia tar na dowolnych dopasowaniach. ({} zastępuje się pasującym plikiem)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Spowoduje to utworzenie pliku o nazwie blah.tar.gz dla każdego pliku w katalogu o nazwie blah.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Jeśli masz w katalogu więcej niż tylko katalogi (tzn. Także pliki, ponieważ ls zwróci wszystko w katalogu), użyj tego:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
Grep -v wyklucza bieżący katalog, który find
domyślnie pojawi się w poleceniu.
for dir in *