Как я смогу сжать подкаталоги в отдельные архивы?
Пример:
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 при любых совпадениях. ({} заменяется соответствующим файлом)
источник
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Это создаст файл с именем blah.tar.gz для каждого файла в каталоге с именем blah.
Если у вас есть больше, чем просто каталоги в каталоге (то есть файлы, а ls вернет все в каталоге), используйте это:
Grep -v исключает текущий каталог, который будет отображаться в
find
команде по умолчанию.источник
for dir in *