Eu tenho um único diretório que contém dezenas de diretórios dentro dele.
Eu sou novo na linha de comando e estou lutando para criar um comando que compactará cada subdiretório em um arquivo subdiretório.zip exclusivo.
Portanto, no final, meu diretório principal será preenchido com todos os meus subdiretórios originais, além dos .zip
arquivos correspondentes que contêm o conteúdo compactado de cada subdiretório.
É algo assim possível? Se sim, por favor, mostre-me como é feito.
command-line
directory
zip
Evster
fonte
fonte
Respostas:
Você pode usar esse loop em
bash
:i
é o nome da variável de loop.*/
significa todos os subdiretórios do diretório atual e incluirá uma barra final nesses nomes. Certifique-se decd
estar no lugar certo antes de executar isso."$i"
simplesmente nomeia esse diretório, incluindo a barra final. As aspas garantem que os espaços em branco no nome do diretório não causem problemas.${i%/}
é semelhante,$i
mas com a barra final removida, para que você possa usá-lo para construir o nome do arquivo zip.Se você quiser ver como isso funciona, inclua um
echo
antes dezip
e você verá os comandos impressos em vez de executados.fonte
*/
nomes de todos os subdiretórios diretos, não de todos os diretórios descendentes. Portanto, você só terá zíperes para o nível superior, do jeito que você quiser. A versãoecho
nele teria demonstrado esse aspecto. Compactar todo diretório aninhado em seu próprio arquivo seria de fato mais trabalhoso e, provavelmente, melhor resolvido usandofind -type d
outros truques.zip
binário, você poderá ter um comportamento diferente. Para criar também arquivos zip para diretórios de nível superior (ou seja, filhos do diretório atual) começando com um ponto, você pode usarshopt -s dotglob
para fazer com que os padrões globais correspondam também aos arquivos ocultos.for i in */; do (cd "$i"; zip -r "../${i%/}.zip" .); done