Как мне сжать подкаталоги в отдельные архивы?
Пример:
directory
subdir1
subdir2
Должен быть создан subdir1 (.tar) .gz и subdir2 (.tar) .gz
Этот небольшой скрипт кажется вашим лучшим вариантом с учетом ваших требований:
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 для любых совпадений. ({} заменяется соответствующим файлом)
Это создаст файл с именем 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
команда по умолчанию.