Использование find
должно работать:
find /dir -not -name "dir" -maxdepth 1 -type d -exec zip -r '{}.zip' '{}' \;
Обратите внимание, что у меня есть /dir
в качестве основного пути find
но также есть -not -name "dir"
чтобы родительский каталог не архивировался. Затем мы ограничиваем глубину сканирования find
с помощью -maxdepth 1
что означает, что find
будет искать только непосредственных потомков пути /dir
. После этого мы будем работать только с каталогами с -type d
. И, наконец, мы используем -exec
для запуска команды magical zip
, которая рекурсивно сжимает все найденные каталоги; {}
просто соответствует самому имени каталога.
Другим тактом будет использование -mindepth 1
вместо -not -name "dir"
на тот случай, если вложенная директория в структуре parent /dir
так или иначе будет называться /dir
или иметь в качестве части своего имени dir. :
find /dir -mindepth 1 -maxdepth 1 -type d -execdir echo {} \;
Теперь они будут создавать ZIP-архивы, которые будут расширяться до полного пути /dir
; /dir/EqcWTG
/dir/SomeDirectoryName
/dir/3435346
и т.д ... Если вы хотите автономные / относительные ZIP архивов можно использовать -execdir
вместо -exec
, как это:
find /dir -not -name "dir" -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;
Та же идея -execdir
, но с -mindepth 1
вместо -not -name "dir"
:
find /dir -mindepth 1 -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;
Так как -execdir
заставляет команду find
действовать в фактическом каталоге, в котором она обнаружила что-то, а не полный путь, эта команда создаст ZIP-архивы с аналогичными именами, которые будут расширяться до относительных каталогов с именами EqcWTG
, SomeDirectoryName
, 3435346
и т.д. Окончательное использование / опции, которые вы выбираете, зависят от ваших конечных потребностей в архивировании ZIP.