O Linux gzip vários subdiretórios em arquivos separados?

13

Como eu seria capaz de compactar subdiretórios em arquivos separados?

Exemplo:

directory
 subdir1
 subdir2

Deverá criar subdir1 (.tar) .gz e subdir2 (.tar) .gz

    
por EarthMind 28.12.2009 / 18:51

3 respostas

23

Este pequeno script parece ser sua melhor opção, considerando suas necessidades:

cd directory
for dir in */
do
  base=$(basename "$dir")
  tar -czf "${base}.tar.gz" "$dir"
done

Lida corretamente com diretórios com espaços em seus nomes.

    
por 28.12.2009 / 19:32
7

Que tal isso: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \; \;

Explicação: Você executa uma descoberta em todos os itens no diretório atual. Maxdepth 0 faz com que ele não seja menor que os argumentos fornecidos. (Neste caso *, ou todos os itens em seu diretório atual) O argumento 'd' para digitar corresponde apenas aos diretórios. Então exec executa tar em qualquer correspondência. ({} é substituído pelo arquivo correspondente)

    
por 28.12.2009 / 18:56
4

Isto irá criar um arquivo chamado blah.tar.gz para cada arquivo em um diretório chamado blah.

$ cd directory
$ for dir in 'ls'; do tar -cvzf ${dir}.tar.gz ${dir}; done

Se você tiver mais que apenas diretórios no diretório (ou seja, arquivos também, como ls retornará tudo no diretório), use:

$ cd directory
$ for dir in 'find . -maxdepth 1 -type d  | grep -v "^\.$" '; do tar -cvzf ${dir}.tar.gz ${dir}; done

O grep -v exclui o diretório atual que será exibido no comando find por padrão.

    
por 28.12.2009 / 19:08

Tags