Использование 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.