Skip to content

Compactação e Descompactação de Arquivos no Linux

Trabalhar com arquivos compactados é uma tarefa cotidiana para qualquer usuário Linux. Seja para economizar espaço em disco, transferir arquivos pela rede ou fazer backups, entender as ferramentas de compactação é essencial. Neste guia, você vai aprender a usar as principais ferramentas disponíveis no Linux, com exemplos práticos que pode usar imediatamente.

Antes de mergulharmos nas ferramentas, vale entender os benefícios da compactação:

  • Economia de espaço: Arquivos compactados ocupam menos espaço em disco
  • Transferências mais rápidas: Arquivos menores são transmitidos mais rapidamente pela rede
  • Organização: Um arquivo compactado pode conter múltiplos arquivos e diretórios
  • Backups eficientes: Compactar backups reduz o espaço necessário para armazenamento

No Linux, é importante distinguir dois conceitos:

Arquivamento: Juntar vários arquivos em um único arquivo (como o tar faz)

Compactação: Reduzir o tamanho de um arquivo usando algoritmos (como gzip e bzip2 fazem)

Muitas vezes, usamos as duas técnicas juntas: primeiro arquivamos com tar, depois compactamos o resultado.

O tar (Tape Archive) é a ferramenta mais usada no Linux para criar arquivos. Originalmente criado para backups em fita, hoje é o padrão para distribuir software e criar backups.

  • Fazer backup de diretórios inteiros
  • Distribuir código-fonte de programas
  • Preservar permissões e estrutura de diretórios
  • Combinar com algoritmos de compactação

Criar um arquivo tar simples:

Terminal window
tar -cvf arquivo.tar diretorio/
  • -c: create (criar)
  • -v: verbose (mostrar progresso)
  • -f: file (especificar nome do arquivo)


Criar tar com compactação gzip (.tar.gz ou .tgz):

Terminal window
tar -czvf arquivo.tar.gz diretorio/

A opção -z adiciona compactação gzip.



Criar tar com compactação bzip2 (.tar.bz2):

Terminal window
tar -cjvf arquivo.tar.bz2 diretorio/

A opção -j usa bzip2, que comprime mais mas é mais lento.



Criar tar com compactação xz (.tar.xz):

Terminal window
tar -cJvf arquivo.tar.xz diretorio/

A opção -J (maiúscula) usa xz, a compactação mais eficiente.



Extrair arquivo tar simples:

Terminal window
tar -xvf arquivo.tar

A opção -x significa extract (extrair).



Extrair tar.gz:

Terminal window
tar -xzvf arquivo.tar.gz


Extrair tar.bz2:

Terminal window
tar -xjvf arquivo.tar.bz2


Extrair tar.xz:

Terminal window
tar -xJvf arquivo.tar.xz


Dica importante: O tar moderno detecta automaticamente o tipo de compactação, então você pode usar simplesmente:

Terminal window
tar -xvf arquivo.tar.gz
tar -xvf arquivo.tar.bz2
tar -xvf arquivo.tar.xz


Terminal window
tar -tvf arquivo.tar.gz

A opção -t lista o conteúdo sem extrair.



Terminal window
tar -xzvf arquivo.tar.gz -C /caminho/destino/


Terminal window
tar -czvf backup.tar.gz --exclude='*.log' --exclude='temp/' projeto/
  • --exclude='*.log': Exclui da compactação todos os arquivos que terminam com .log:
    • Exemplos excluídos: app.log, error.log, sistema.log
  • --exclude='temp/': Exclui o diretório chamado temp/ e todo seu conteúdo:
    • A barra / no final indica que é um diretório
    • Tudo dentro de temp/ será ignorado

O gzip é o algoritmo de compactação mais usado no Linux. Ele oferece um bom equilíbrio entre velocidade e taxa de compactação.

  • Compactação rápida de arquivos individuais
  • Situações onde velocidade é mais importante que tamanho
  • Compatibilidade universal (está em todos os sistemas Unix-like)

Compactar um arquivo:

Terminal window
gzip arquivo.txt

Isso cria arquivo.txt.gz e remove o original.



Manter o arquivo original:

Terminal window
gzip -k arquivo.txt


Compactação máxima:

Terminal window
gzip -9 arquivo.txt

Os níveis vão de -1 (mais rápido) a -9 (melhor compactação). O padrão é -6.

Descompactar:

Terminal window
gzip -d arquivo.txt.gz
# ou
gunzip arquivo.txt.gz


Manter o arquivo compactado:

Terminal window
gzip -dk arquivo.txt.gz
Terminal window
zcat arquivo.txt.gz
zless arquivo.txt.gz
zgrep "termo" arquivo.txt.gz

O bzip2 oferece melhor taxa de compactação que o gzip, mas é mais lento. Ideal quando o espaço é mais importante que o tempo de processamento.

  • Arquivos grandes onde economia de espaço é crítica
  • Arquivamento de longo prazo
  • Quando velocidade de compactação não é prioridade

Compactar um arquivo:

Terminal window
bzip2 arquivo.txt

Cria arquivo.txt.bz2.



Manter o arquivo original:

Terminal window
bzip2 -k arquivo.txt


Compactação máxima:

Terminal window
bzip2 -9 arquivo.txt

Descompactar:

Terminal window
bzip2 -d arquivo.txt.bz2
# ou
bunzip2 arquivo.txt.bz2
Terminal window
bzcat arquivo.txt.bz2
bzless arquivo.txt.bz2
bzgrep "termo" arquivo.txt.bz2

O xz é o algoritmo mais moderno e eficiente, oferecendo as melhores taxas de compactação. É usado em distribuições Linux para pacotes de software.

  • Máxima compactação necessária
  • Distribuição de software
  • Arquivos grandes que serão armazenados por muito tempo

Compactar um arquivo:

Terminal window
xz arquivo.txt


Manter o arquivo original:

Terminal window
xz -k arquivo.txt


Compactação extrema:

Terminal window
xz -9e arquivo.txt

Descompactar:

Terminal window
xz -d arquivo.txt.xz
# ou
unxz arquivo.txt.xz
Terminal window
xzcat arquivo.txt.xz
xzless arquivo.txt.xz
xzgrep "termo" arquivo.txt.xz

O zip não é nativo do Unix, mas é amplamente usado pela compatibilidade com Windows e outros sistemas operacionais.

  • Compartilhar arquivos com usuários Windows
  • Compatibilidade multiplataforma
  • Quando você precisa adicionar/remover arquivos do arquivo compactado

Criar arquivo zip:

Terminal window
zip arquivo.zip arquivo1.txt arquivo2.txt


Compactar diretório recursivamente:

Terminal window
zip -r projeto.zip projeto/


Compactação máxima:

Terminal window
zip -9 -r arquivo.zip diretorio/

Extrair arquivo zip:

Terminal window
unzip arquivo.zip


Extrair em diretório específico:

Terminal window
unzip arquivo.zip -d /caminho/destino/


Listar conteúdo:

Terminal window
unzip -l arquivo.zip


Testar integridade:

Terminal window
unzip -t arquivo.zip
FerramentaCompactaçãoVelocidadeUso de CPUUso de MemóriaCompatibilidadeMelhor uso
gzipBoaRápidaBaixoBaixoUniversal UnixUso geral, velocidade importante
bzip2Muito boaMédiaMédioMédioUniversal UnixArquivos grandes, espaço crítico
xzExcelenteLentaAltoAltoModerno Unix/LinuxMáxima compactação, distribuição
zipBoaRápidaBaixoBaixoMultiplataformaCompatibilidade Windows
tarNenhuma*Muito rápidaMuito baixoBaixoUniversal UnixArquivamento (combinar com outros)

*O tar sozinho não compacta, apenas arquiva. Combina-se com gzip/bzip2/xz.

Vamos ver um exemplo real com um diretório de 100 MB:

Terminal window
# Arquivo original
du -sh projeto/
# 100M projeto/
# Diferentes compactações
tar -czf projeto.tar.gz projeto/ # 45M (gzip)
tar -cjf projeto.tar.bz2 projeto/ # 38M (bzip2)
tar -cJf projeto.tar.xz projeto/ # 32M (xz)
zip -r projeto.zip projeto/ # 46M (zip)

Tempo de compactação aproximado:

  • gzip: 5 segundos
  • bzip2: 15 segundos
  • xz: 40 segundos
  • zip: 6 segundos

Use nomes descritivos e inclua a data:

Terminal window
tar -czvf backup_projeto_$(date +%Y%m%d).tar.gz projeto/
# Resultado: backup_projeto_20250129.tar.gz

Teste os arquivos compactados:

Terminal window
# Para tar
tar -tvf arquivo.tar.gz > /dev/null && echo "OK" || echo "ERRO"
# Para zip
unzip -t arquivo.zip
# Para gzip
gzip -t arquivo.gz

Combine ferramentas via pipe:

Terminal window
# Backup direto para arquivo compactado
mysqldump banco | gzip > banco_backup.sql.gz
# Transferência pela rede com compactação
tar -czf - diretorio/ | ssh user@servidor "cat > backup.tar.gz"
  • - (entre zcf e diretorio/): Envia a saída do comando para stdout. Permite que o próximo comando receba os dados via pipe Sem isso, o tar gravaria um arquivo local

Para arquivos muito grandes, divida em partes:

Terminal window
# Criar arquivo e dividir em partes de 1GB
tar -czf - grande_diretorio/ | split -b 1G - backup.tar.gz.part
# Recombinar e extrair
cat backup.tar.gz.part* | tar -xzf -
Terminal window
tar -czvf ~/backups/backup_$(date +%Y%m%d_%H%M%S).tar.gz ~/documentos/
Terminal window
find /var/log -name "*.log" -mtime +30 -exec gzip {} \;
Terminal window
tar -xzvf arquivo.tar.gz caminho/para/arquivo_especifico.txt
  • caminho/para/arquivo_especifico.txt: Caminho do arquivo dentro do arquivo tar.gz.
Terminal window
du -sh diretorio/
tar -czvf arquivo.tar.gz diretorio/
ls -lh arquivo.tar.gz
Terminal window
# Todos os .tar.gz no diretório
for f in *.tar.gz; do tar -xzvf "$f"; done
# Todos os .zip
for f in *.zip; do unzip "$f"; done

Se receber erro ao descompactar:

Terminal window
# Teste a integridade
gzip -t arquivo.gz
tar -tzf arquivo.tar.gz
# Tente recuperação
gzip -dc arquivo.gz > arquivo_recuperado.txt
Terminal window
# Extrair diretamente para outro disco
tar -xzvf arquivo.tar.gz -C /mnt/outro_disco/
Terminal window
# Manter permissões originais ao extrair (necessita root em alguns casos)
sudo tar -xzvpf arquivo.tar.gz

A opção -p preserva permissões.

  • man tar - Manual completo do tar
  • man gzip - Documentação do gzip
  • man bzip2 - Documentação do bzip2
  • man xz - Documentação do xz



tar(1) — Linux manual page