Команда для массового сжатия всех файлов / папок в каталоге - PullRequest
0 голосов
/ 21 сентября 2009

Я ищу команду, которая сжимает каждую папку в каталоге отдельно, причем имя каждого архива отражает оригинальное имя папки. Я знаю, что

tar czvf example.tar.gz пример /

сожмет всю папку. Однако я не нашел команду для массового архивирования. Есть ли такая команда?

Ответы [ 3 ]

1 голос
/ 21 сентября 2009
for f in `find -mindepth 1 -maxdepth 1 -type d`; do
    tar -czf $f.tar.gz $f
done
1 голос
/ 21 сентября 2009
find -mindepth 1 -maxdepth 1 -type d -exec tar czf {}.tar.gz {} \;

Обратите внимание, что я использовал -maxdepth 1.

Рассмотрим структуру каталогов:

.
|-- a
|   `-- x
|-- b
`-- c

Без -maxdepth 1 вы получите a.tar.gz и a/x.tar.gz. a.tar.gz будет содержать x и все файлы внутри; и a/x.tar.gz будет содержать x и его файлы. Но это хранит предметы в пределах x дважды, при условии, что это не цель.

Обновлен для использования -mindepth 1, поскольку при запуске вне example/ также создается example.tar.gz.

Обновление ... и для bzip2:

find -mindepth 1 -maxdepth 1 -type d -exec tar cjf {}.tar.bz2 {} \;
0 голосов
/ 21 сентября 2009

Хорошо, вот последняя команда, которую я придумал, чтобы заархивировать, затем сжать с помощью bzip2 для максимального сжатия

find -mindepth 1 -maxdepth 1-type d -exec tar cjf '{}'. Tar.bz2 '{}' \;

спасибо всем!

...