Linux tux ninja

Como comprimir arquivos no Linux, usando o comando gzip

O comando gzip oferece um dos meios mais eficientes de comprimir arquivos, no Linux.
O gzip faz uso do Lempel-Ziv ou lz77 que, além de ser eficaz na redução do pacote final, promove uma metodologia de compressão lossless, ou seja, sem perda de informações.
gzip oficial logo

O LZ77 e o LZ78 são dois algoritmos de compressão lossless, publicados por Abraham Lempel e Jacob Ziv, em 1977 e 1978.
São também conhecidos por LZ1 e LZ2, respectivamente. Ambos formam a base para outras variações, o que inclui os LZW, LZSS, LZMA etc.
Além da influência no meio acadêmico, estes algoritmos formaram a base de vários importantes e ubíquos esquemas de compressão, tais como o GIF (imagens) e o algoritmo deflacionário usado nas imagens PNG.

O gzip é um comando muito usado na compressão de arquivos e diretórios no Linux — diretamente ou dentro de scripts (de backup, por exemplo). Com toda certeza, vale a pena conhecer melhor o seu uso.
Ao final do artigo, há um link para o site data-compression, onde é possível obter mais informações sobre o algoritmo.
A animação, que segue, demonstra a aplicação do método LZ1/LZ2 de compressão:
lempelziv animation
Além disto, entre os programas de (de)compressão, este é padrão e costuma estar presente em quase todas as distribuições GNU/Linux.

Como usar o gzip, na linha de comando do Linux

Como comportamento padrão, quando comprimimos um arquivo ou pasta, usando o comando gzip, o resultado será um arquivo com o mesmo nome, acrescido da extensão .gz.
Para comprimir um simples arquivo, use o gzip na linha de comando, assim:

gzip arquivo

O mesmo vale para um arquivo do LibreOffice:

gzip documento.odt 
ls doc*

documento.odt.gz

Como você pode ver, no exemplo acima, o nome do arquivo foi acrescido da extensão .gz, logo após sua original .odt.
Alguns arquivos irão ter taxas de compressão melhores do que outros.
Documentos de texto, imagens bitmap, arquivos de áudio WAV e FLAC, entre outros, costumam alcançar boas taxas de compressão.
Por outro lado, arquivos de compressão lossy, que já sofreram perda de dados, como imagens JPEG e áudio MP3, terão péssimas taxas de compressão. Na verdade, o resultado final pode acabar sendo um arquivo maior — uma vez que passarão a carregar informações adicionadas pelo gzip.

Como descomprimir arquivos gzip

Se você tem um arquivo que já tenha sido comprimido via gzip, use o comando acompanhado da opção ‘-d’ (descomprimir) para reverter o processo anterior.
Veja um exemplo:

gzip -d documento.odt.gz 
ls doc*

documento.odt

Como forçar o gzip a comprimir um arquivo

Quando não houver ganho na compressão de algum arquivo, o gzip pode “se recusar” a fazer o serviço.
Se você pretende insistir na tarefa, use a opção ‘-f’ para forçar o gzip a prosseguir.
No exemplo, que segue, acompanhe o que é feito, através dos comentários, precedidos pelo símbolo #:

# Verificação do tamanho original do arquivo BackCover.jpg.gz
ls -l BackCover.jpg.gz 
-rw-r--r-- 1 justincase justincase 76646 Ago 29 18:22 BackCover.jpg.gz

# Ao tentar comprimir o arquivo o programa avisa que ele já tem a extensão .gz
gzip BackCover.jpg.gz 
gzip: BackCover.jpg.gz already has .gz suffix -- unchanged

# Para prosseguir, use a opção -f
gzip -f BackCover.jpg.gz 

# Note que o arquivo final passou a ter 50 bytes a mais
ls -l BackCover.jpg.gz.gz 
-rw-r--r-- 1 justincase justincase 76696 Ago 29 18:22 BackCover.jpg.gz.gz

Se quiser, faça suas próprias experiências, antes de prosseguir.

Como manter o arquivo original e aplicar a compressão a uma cópia

Para manter o arquivo original e criar um novo arquivo comprimido, use a opção ‘-k’:

gzip -k cartaz.jpg
ls -l cartaz.*
-rw-r--r-- 1 justincase justincase 76965 Ago 29 18:22 cartaz.jpg
-rw-r--r-- 1 justincase justincase 76643 Ago 29 18:22 cartaz.jpg.gz

Como obter estatísticas de compressão do gzip

O objetivo de se comprimir arquivos é economizar espaço de armazenamento e/ou obter transferências mais eficientes, na rede.
Seria interessante, portanto, obter algumas estatísticas sobre a eficiência de compressão sobre os arquivos.
Para ter uma idéia da eficiência da compressão de um arquivo, use a opção ‘-l’:

gzip -l cartaz.jpg.gz 

O que se vê, como resultado, é o tamanho original do arquivo, seu tamanho comprimido, a taxa de compressão obtida pelo gzip e, por fim, o nome original do arquivo:

         compressed        uncompressed  ratio uncompressed_name
              76643               76965   0.5% cartaz.jpg

Dá para comprimir pastas com o gzip?

Se você quiser comprimir uma pasta inteira, para dentro de um único pacote, o ideal é usar o comando tar — por que o gzip irá comprimir cada arquivo, individualmente, não a pasta inteira, como um pacote.
Além disto, ele não aceita compactar o diretório. Veja:

gzip textos/
gzip: textos/ is a directory -- ignored

Para compactar os arquivos dentro do diretório – recursivamente, portanto –, é necessário usar a opção ‘-r’:

gzip -r textos/

O resultado é o que segue:

ls -l textos/
total 20
-rw-r--r-- 1 justincase justincase 145 Ago 30 11:18 texto1.txt.gz
-rw-r--r-- 1 justincase justincase 145 Ago 30 11:20 texto2.txt.gz
-rw-r--r-- 1 justincase justincase 145 Ago 30 11:20 texto3.txt.gz
-rw-r--r-- 1 justincase justincase 145 Ago 30 11:20 texto4.txt.gz
-rw-r--r-- 1 justincase justincase 145 Ago 30 11:20 texto5.txt.gz

Como verificar se o gzip obteve sucesso no procedimento

Se você usa o gzip, dentro de um processo de backup, pode verificar a integridade de cada arquivo comprimido com a opção ‘-t’:

gzip -tv textos/*
textos/texto1.txt.gz:    OK
textos/texto2.txt.gz:    OK
textos/texto3.txt.gz:    OK
textos/texto4.txt.gz:    OK
textos/texto5.txt.gz:    OK

Note que adicionei o ‘v’ às opções do comando. Do contrário, ele não retornaria resultados, a menos que houvesse erros. Isto seria útil dentro de um script.
Por fim, é possível controlar a taxa de compressão, adicionando um valor númerico, como opção — de 1 a 9.
Para obter a taxa de compressão máxima, use o valor 9.
Na “brincadeira”, abaixo, o arquivo foi compactado com a opção ‘-1’, primeiro (que é a taxa de compressão mais baixa) e depois, com a taxa de compressão mais alta. Enquanto isto, foi verificada a estatística de compressão de cada um, com a opção ‘-l’:

# compactando com a taxa mais baixa
gzip -1 documento.odt 
# obtendo estatísticas
gzip -l documento.odt.gz 
         compressed        uncompressed  ratio uncompressed_name
                159                 685  81.5% documento.odt

# descomprimindo o arquivo
gzip -d documento.odt.gz 
# compactando com a taxa mais alta
gzip -9 documento.odt 
# obtendo estatísticas
gzip -l documento.odt.gz 
         compressed        uncompressed  ratio uncompressed_name
                158                 685  81.6% documento.odt


Não use o programa gzip com arquivos ZIP. Para este tipo de arquivo, existem aplicativos apropriados: o zip e o unzip, por exemplo.

Referências

https://en.wikipedia.org/wiki/LZ77_and_LZ78.
http://www.data-compression.com/lempelziv.html.
http://linux.about.com/od/commands/fl/Example-Uses-Of-The-Linux-gzip-Command.htm?utm_content=7489444&utm_medium=email&utm_source=exp_nl&utm_campaign=list_linux&utm_term=.

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), desenvolvedor web e geek, nos mais diversos assuntos. Entusiasta de software livre e hacker de LEGO, acredito em repassar meu conhecimento e ajudar as pessoas sempre que for possível.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *