bash: найти и заархивировать все подпапки папки
Как найти все подпапки папки и архивировать их отдельно?
структура папок
./folder
-subfolder_1
-subfolder_2
-subfolder_3
ожидаемый результат:
./folder
-subfolder_1.zip
-subfolder_2.zip
-subfolder_3.zip
Я пробовал следующее:
for i in .; do zip -r $i.zip $i; done;
в результате получился один ..zip- файл, содержащий все подпапки
3 ответа
Решение
Собственно решение предоставлено m1k3y02 (for i in *; do zip -r "$i.zip" $i; done
) будет работать только если текущий каталог содержит только подкаталоги.
Лучший способ поиска и архивирования только подкаталогов:
for dir in ./* ;do
if [[ -d $dir ]];then
zip -r ${dir}.zip $dir
fi
done
или же
find . -type d -maxdepth 1 -exec zip -r {}.zip {} \;
Вот несколько изменений в одном из ответов zuberruber :
find . -mindepth 1 -maxdepth 1 -type d -exec zip -r --move --test {}.zip {} \;
Он добавляет-mindepth
test, чтобы избежать архивирования текущего каталога, и ставит глобальные тесты глубины перед-type
тест, чтобы избежать предупреждения. Кроме того, я добавил--move --test
в команду zip, чтобы разархивированные файлы были удалены после успешного сжатия.
Решение следующим образом...
for i in *; do zip -r "$i.zip" $i; done;