comando para zipar vários diretórios em arquivos zip individuais

35

Eu tenho um único diretório que contém dezenas de diretórios dentro dele.

Sou novo na linha de comando e estou com dificuldades para criar um comando que compacte cada subdiretório em um único arquivo subdiretório.zip.

Assim, no final, meu diretório principal será preenchido com todos os meus subdiretórios originais, além dos arquivos .zip correspondentes que contêm o conteúdo compactado de cada subdiretório.

É algo assim possível? Se sim, mostre-me como é feito.

    
por Evster 19.03.2013 / 22:18

1 resposta

62

Você pode usar este loop em bash :

for i in */; do zip -r "${i%/}.zip" "$i"; done

i é o nome da variável de loop. */ significa todos os subdiretórios do diretório atual e incluirá uma barra nos nomes. Certifique-se de que você cd esteja no lugar certo antes de executar isso. "$i" simplesmente nomeia esse diretório, incluindo a barra final. As aspas asseguram que os espaços em branco no nome do diretório não causem problemas. ${i%/} é como $i mas com a barra final removida, então você pode usar isso para construir o nome do arquivo zip.

Se você quiser ver como isso funciona, inclua um echo antes do zip e você verá os comandos impressos ao invés de executados.

    
por 19.03.2013 / 22:30