Como eu seria capaz de compactar subdiretórios em arquivos separados?
Exemplo:
directory
subdir1
subdir2
Deve criar subdir1 (.tar) .gz e subdir2 (.tar) .gz
Este pequeno script parece ser a melhor opção, considerando seus requisitos:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Ele lida adequadamente com diretórios com espaços em seus nomes.
Que tal agora:
find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Explicação: Você executa uma localização em todos os itens no diretório atual. A profundidade máxima de 0 não faz com que seja menor do que os argumentos apresentados. (Nesse caso, * ou todos os itens em seu diretório atual) O argumento 'd' para "-type" corresponde apenas aos diretórios. Então exec executa tar em qualquer combinação. ({} é substituído pelo arquivo correspondente)
fonte
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Isso criará um arquivo chamado blah.tar.gz para cada arquivo em um diretório chamado blah.
Se você tiver mais do que simplesmente diretórios no diretório (ou seja, arquivos também, pois ls retornará tudo no diretório), use o seguinte:
O grep -v exclui o diretório atual que será exibido no
find
comando por padrão.fonte
for dir in *