Nomeando pastas compactadas

1

Eu encontrei uma solução sobre como compactar todas as pastas em uma subpasta.

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

O problema é que quero nomear as pastas .zip da seguinte maneira: parentFolder_zippedFolder.zip , mas quero manter a estrutura de código mostrada acima, se possível. Eu gostaria que parecesse

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

se possível, mas não consegui encontrar uma maneira de fazer isso em um script bash.

    
por LizzAlice 19.12.2016 / 16:50

1 resposta

1

Dada uma estrutura de pastas como esta:

./parent
./parent/child1
./parent/child1/data1
./parent/child2
./parent/child2/data2

Executando este comando: for i in */*; do zip -r "${i/\//_}.zip" "$i"; done produzirá os seguintes arquivos:

./parent_child1.zip
./parent_child2.zip

O conteúdo é o mesmo que o comando da sua pergunta, com os nomes que você pediu.

Note que os arquivos zip são criados um nível acima, comparado ao seu comando. Seu comando cria os arquivos zip dentro do diretório parent , meu comando os cria ao lado do diretório pai.

${i/\//_} é uma substituição bash que substitui o caractere / na variável i pelo caractere _ . Como o caractere / é especial em bash , temos que escapar, dando \/ . Se fôssemos substituir a letra t , a substituição seria ${i/t/_} .

    
por Adrien Beau 19.12.2016 / 19:43