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/_}
.