Ответы:
Этот небольшой скрипт кажется вашим лучшим вариантом, учитывая ваши требования:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Он правильно обрабатывает каталоги с пробелами в их именах.
Как насчет этого: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Объяснение: Вы запускаете поиск для всех элементов в текущем каталоге. Maxdepth 0 заставляет его не повторяться ниже приведенных аргументов. (В этом случае * или все элементы в вашем текущем каталоге) Аргумент '-d' для -type соответствует только каталогам. Затем exec запускает tar при любых совпадениях. ({} заменяется соответствующим файлом)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Это создаст файл с именем blah.tar.gz для каждого файла в каталоге с именем blah.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Если у вас есть больше, чем просто каталоги в каталоге (то есть файлы, а ls вернет все в каталоге), используйте это:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
Grep -v исключает текущий каталог, который будет отображаться в find
команде по умолчанию.
for dir in *