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;