Назад | Перейти на главную страницу

Linux gzip несколько подкаталогов в отдельные архивы?

Как мне сжать подкаталоги в отдельные архивы?

Пример:

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 команда по умолчанию.