Eu tenho o código atual:
for fname in *.*; do
prefix=${fname%.*}
[ ! -f "$fname" ] || [ -f "$prefix.zip" ] && continue
zip "$prefix" "$prefix".*
done
Isso faz principalmente o que eu quero, mas tenho que excluir os arquivos originais. Existe uma modificação que pode ser feita para remover os arquivos originais após a compactação? Se possível, como posso executar isso em um diretório ou em seus subdiretórios?
A estrutura atual do arquivo é a seguinte:
-rootDir
|- Dir1
|- file1.jpg
|- file1.png
|- file1.mp3
|- Dir2
|- file2.jpg
|- file2.png
|- file2.mp3
Estou buscando a estrutura abaixo:
-rootDir
|- Dir1
|- file1.zip
|- Dir2
|- file2.zip
Conforme mencionado, o código acima funciona bem quando executado em um único diretório.
Agora tenho 300 subdiretórios e seria de grande ajuda se eu pudesse obter uma versão modificada do código acima para executar no nível do diretório raiz, bem como organizar os arquivos restantes.
zip
tem uma opção--move
(-m
) para solicitar que ele mova os arquivos para um arquivo, ou seja , exclua-os após terem sido adicionados com sucesso ao arquivo. Recomenda-se emparelhá-lo com a-T
opção de testar o arquivo antes de remover os arquivos:Para lidar com vários diretórios, você pode fazer um loop sobre eles: