Usando find isso deve funcionar:
find /dir -not -name "dir" -maxdepth 1 -type d -exec zip -r '{}.zip' '{}' \;
Observe como eu tenho /dir como o caminho principal find , mas também tenho -not -name "dir" para que o diretório pai não seja arquivado. Em seguida, limitamos a profundidade da varredura de find com -maxdepth 1 , o que significa que find pesquisará somente os filhos imediatos do caminho /dir . Depois disso, nos certificamos de apenas atuar em diretórios com -type d . E finalmente usamos -exec para executar o comando mágico zip que comprimirá recursivamente todos os diretórios que encontrar; {} apenas equivale ao nome do diretório em si.
Outro tato seria usar -mindepth 1 em vez de -not -name "dir" apenas no caso de um diretório aninhado na estrutura pai /dir de alguma forma também usar o nome de /dir ou ter "dir" como parte dele nome:
find /dir -mindepth 1 -maxdepth 1 -type d -execdir echo {} \;
Agora, eles criariam arquivos ZIP que se expandiriam para o caminho /dir completo; /dir/EqcWTG , /dir/SomeDirectoryName , /dir/3435346 , etc ... Se você quisesse arquivos ZIP autônomos / parecidos, poderia usar -execdir em vez de -exec da seguinte forma:
find /dir -not -name "dir" -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;
Mesma ideia de -execdir , mas com -mindepth 1 em vez de -not -name "dir" :
find /dir -mindepth 1 -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;
Como -execdir força o comando find a atuar no diretório real em que encontrou algo - em vez do caminho completo - esse comando criaria arquivos ZIP com nomes semelhantes que se expandiriam para diretórios relativos denominados EqcWTG , SomeDirectoryName , 3435346 , etc… Mas, novamente, o uso / opções finais que você escolher dependerá das suas necessidades finais de arquivamento de ZIPs.