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.
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:
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=.
2 replies on “Como comprimir arquivos no Linux, usando o comando gzip”
é uma duvida, se puder me ajudar !!!
após comprimir um arquivo, o tamanho fica maior ou menor, porquê ?
Normalmente, fica menor.