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 {} \;

Он добавляет-mindepthtest, чтобы избежать архивирования текущего каталога, и ставит глобальные тесты глубины перед-typeтест, чтобы избежать предупреждения. Кроме того, я добавил--move --testв команду zip, чтобы разархивированные файлы были удалены после успешного сжатия.

Решение следующим образом...

for i in *; do zip -r "$i.zip" $i; done; 
Другие вопросы по тегам