Tentou gzip do diretório aplicado gzip para cada arquivo individualmente

2

Eu tentei gzipar um diretório com o seguinte comando:

gzip -r /home/path/to/backups/mydirectory.gz /home/site/public_html/

Eu estava esperando ver um arquivo .gz aparecer dentro ... backups contendo todos os arquivos encontrados em ... public_html. Isto não é o que aconteceu. Em vez disso, cada arquivo foi (recursivamente) renomeado para [nome do arquivo] .gz dentro de public_html. Isso, obviamente, derrubou um site inteiro.

Duas perguntas: 1) O que fiz de errado com a sintaxe? e 2) Como posso reverter todos os nomes dos arquivos para o que eles eram antes (exatamente o que eles são agora, menos a extensão .gz).

    
por Sampson 21.01.2011 / 21:37

3 respostas

9

Two questions: 1) What did I do wrong with the syntax?

O Gzip apenas compacta arquivos individuais; não é uma ferramenta de arquivamento. É geralmente usado em combinação com algo como tar . Na verdade, algumas versões de tar usarão gzip para criar automaticamente um archive compactado se receberem sinalizadores apropriados. Por exemplo:

tar -cvz -f public_html.tar.gz /home/site/public_html/

Isso cria ( -c ) um arquivo compactado em gzip ( -z ) chamado public_html.tar.gz contendo o conteúdo do diretório public_html especificado.

2) How can I revert all of the filenames back to what they were before (exactly what they are now, minus the .gz extension).

Basta executar gunzip em todos os arquivos. Por exemplo:

gunzip -r /home/site/public_html/

Observe que você também pode simplesmente usar o comando zip , que criará um único arquivo compactado.

    
por 21.01.2011 / 21:40
1

O gzip não combina arquivos. Não é como zip. Você precisa usar tar com gzip

tar cf file.tar dir
gzip file.tar

ou

tar zcf file.tar.gz dir
    
por 21.01.2011 / 21:39
1

gzip é apenas um compressor, não um arquivador de arquivos. Eu sei, é estranho quando você está vindo do mundo de pkzip , que faz as duas coisas.

O que você deseja usar é tar , que faz o arquivamento recursivo de arquivos em um arquivo grande, que você pode compactar. Geralmente, você executa o tar do pai do diretório que deseja arquivar, algo assim:

tar -cvf archive-name.tar  directory-to-store/

O que lhe dará um arquivo descompactado. Você pode comprimir isso com

gzip archive-name.tar

Que lhe dará archive-name.tar.gz .

Se você estiver usando o GNU tar (e provavelmente você está), você pode combiná-los em uma única etapa adicionando o sinalizador z:

tar -czvf archive-name.tar.gz directory-to-store/

e você pode descompactar com

tar -xzvf archive-name.tar.gz

E, na verdade, com as versões modernas do GNU tar, não é necessário fornecer o -z para a descompactação - ele detectará automaticamente. Isso é útil, porque o GNU tar também suporta -j para (melhor que gzip) bzip2 de compactação e (se você tiver uma nova versão suficiente) -J para uma compactação xz ainda melhor. Normalmente, você daria a arquivos dessa forma .tar.bz2 ou .tar.xz extensões, mas é irritante ter que escolher o sinalizador correto para descompactar, especialmente em scripts.

    
por 21.01.2011 / 21:49

Tags