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.