Como faço gunzip um diretório?

6

Eu tenho um diretório gzipped chamado "new" que contém outros diretórios e arquivos, que eu comprimi da seguinte maneira

gzip -cvr --no-name /path-to-directory/new > new.gz

Eu copiei este > 700MB para outro local (em um servidor diferente) e agora gostaria de descompactá-lo. Então, no novo servidor eu vou para o diretório tem "novo" e eu uso

gzip new

O resultado é um único arquivo de 880 MB - sem diretórios ou arquivos menores.

O que fiz de errado e como posso corrigir isso?

Obrigado.

    
por chaimp 24.11.2009 / 19:00

3 respostas

14

O Gzip comprime arquivos, não diretórios. Se você quiser gzipar um diretório, você deve primeiro criar um tarball. Você pode criar um tarball e compactá-lo em um passo.

tar cvzf tarball.tar.gz directory/

(crie, verboso, gZip, para este arquivo)

para reverter o processo

tar xvzf tarball.tar.gz

(eXtract)

    
por 24.11.2009 / 19:09
2
tar cf - directory | gzip -9c > foo.tar.gz

Copie isso como antes e faça o contrário:

tar xzf foo.tar.gz

Se você estiver usando o SSH para transferir os arquivos, poderá ignorar a etapa intermediária de ter um arquivo para armazenar e transferir:

tar cf - directory | gzip -9c | ssh user@hostname "cd /destdir ; tar xzvf -"

Isso é especialmente útil se o arquivo tar resultante for muito grande e não couber na partição de destino junto com os dados não compactados. Nesse caso, usar o rsync pode ser melhor de qualquer maneira.

    
por 24.11.2009 / 19:17
1

Parece que você deveria ter usado o tar (com a opção gzip):

# -z  : pipe through gzip
# -cf : create file
tar -zcf new.tgz /path-to-directory

depois com o arquivo new.tgz resultante:

# z : gzip
# x : extract
# p : keep permissions
tar zxpf new.tgz

EDITAR

Qual é o objetivo do gzip -r então? - jeffp 37 minutos atrás

O gzip é um compressor de fluxo - ele realmente não olha para o conteúdo do que você está compactando além do que ele precisa para torná-lo menor, então ele não tem nenhum conceito de diretórios.

Assim como uma nota lateral, acho que o bzip2 faz um trabalho muito melhor de compactação do que o gzip - embora seja mais lento.

# -j  : pipe through bzip2
# -cf : create file
tar -jcf new.tar.bzip2 /path-to-directory

bunzip2 new.tar.bzip2
    
por 24.11.2009 / 19:13

Tags