Страницы

Поиск по вопросам

воскресенье, 9 июня 2019 г.

Как заархивировать все папки в текущем каталоге, кажую в отдельный архив

Например имеем в текущем каталоге папки 001,002,003
На выходе надо иметь три архива 001.tar.gz, 002.tar.gz, 003.tar.gz


Ответ

может не самое элегантное, но хорошо работающее решение:
find . -type d -maxdepth 1 -mindepth 1| xargs -i tar -cvzf {}.tar.gz {}
объясняю что происходит:
1) find . -type d -maxdepth 1 -mindepth 1 find — утилита для поиска и обхода файлов и директорий
. — текущий каталог
-type d — ключ для обхода только директрий в текущем каталоге
-maxdepth 1 -mindepth 1 — глубина обхода после этого на stdout у нас подаются адреса каталогов которые нужно архивировать
2) | xargs -i tar -cvzf {}.tar.gz {}
| — конвейер. переваёт вывод поманды в следующую команду xargs — утилита, помогающая формировать список аргументов -i — ключ,который говорит что мы будем что-то подставлять tar -cvzf {}.tar.gz {} — команда для архивации каталога по gz(вместо {} подставляется имя каталога, сформированное утилитой find). -{}.tar.gz — имя архива(каталог+"tar.gz") вторые {} — что директория для архивации
после этого в текущем каталоге у тебя появятся нужные тебе архивы , которые ты запросто можешь переместить в нужную тебе директорию командой:
find . -type f| grep tar.gz | xargs -i mv {} нужная/папка

Комментариев нет:

Отправить комментарий