Este site usa cookies e tecnologias afins que nos ajudam a oferecer uma melhor experiência. Ao clicar no botão "Aceitar" ou continuar sua navegação você concorda com o uso de cookies.

Aceitar

Parte 3 - Comandos de Compactação e Descompactação no Linux

Junte-se a mais de 1000 pessoas

Entre para nossa lista e receba conteúdos exclusivos e com prioridade

A compactação e descompactação de arquivos são tarefas comuns em administração de sistemas e manipulação de dados no ambiente Linux.

Comprimir arquivos reduz o tamanho do arquivo, economizando espaço em disco e agilizando a transferência de dados. Felizmente, o Linux oferece várias ferramentas poderosas para executar essas tarefas. Neste artigo, exploraremos os comandos mais populares de compactação e descompactação, juntamente com exemplos práticos.

Explorando o Comando Tar no Linux: Compactação e Descompactação

O comando tar é uma ferramenta versátil e fundamental no arsenal de um administrador de sistemas ou usuário Linux. Ele é frequentemente usado para criar arquivos de backup, compilar vários arquivos em um único arquivo e, claro, para realizar operações de compactação e descompactação. Neste artigo, vamos mergulhar mais fundo no comando `tar` e explorar suas capacidades para compactar e descompactar arquivos.

Compactação com o Tar

O comando tar não compacta arquivos por si só, mas pode ser usado em conjunto com outras ferramentas de compactação, como o gzip ou o bzip2, para criar arquivos compactados.

Exemplo de compactação do diretório /home/roberto

tar -cvf roberto.tar /home/roberto

Podemos complementar a ação acima, compactando o arquivo gerado com o utilitário gzip que diminuirá consideravelmente o tamanho do arquivo.

tar -cvzf roberto.tar.gz /home/roberto

Podemos também utilizar como opção o utilitário bzip2 que também serve para complementar a compactação original realizada pelo tar. Abaixo um exemplo desta compactação adicional.

tar - cvjf roberto.tar.bz2 /home/roberto

Ainda uma outra opção é a utilização do tgz que similar aos demais permite uma compactação extra. Exemplo:

tar -cvzf roberto.tgz /home/roberto

Você pode visualizar a diferença de tamanhos de arquivos compactados gerados com os comandos, através do comando:

ls -lah | grep roberto

Para a descompactação dos arquivos acimas criados, utilizamos comandos similares, apenas alterando algumas letras. O exemplo abaixo mostra como descompactar arquivos tar.

tar -xvf roberto.tar

Para descompactar o arquivo acima em outro diretório que não seja o mesmo onde se encontra o arquivo compactado atualmente, utilizamos o comando (onde /tmp é o diretório que escolhemos para descompactar o conteúdo do arquivo):

tar -xvf roberto.tar -C /tmp

Para descompactar um arquivo com a extensão tar.gz, bz2, tgz ou escolher outro local para esta descompactação, podemos utilizar os comandos abaixo:

tar -xvf roberto.tar.gz 
tar -xvf roberto.tar.bz2
tar -xvf roberto.tgz
tar -xvf roberto.tar.gz -C /tmp

Para visualizarmos os arquivos e diretórios que estão dentro de um arquivo compactado, sem que precisamos descompactar o mesmo, podemos utilizar os seguintes comandos (variar, conforme o tipo de compactação utilizado):

tar -tvf roberto.tar
tar -tvf roberto.tar.gz
tar -tvf roberto.tar.bz2

Para descompactar um único arquivo ou mais, sem que sejam todos (do arquivo originalmente compactado), podemos utilizar os seguintes comandos:

tar -xvf roberto.tar arq1.txt
tar -xvf roberto.tar arq1.txt arq2.txt

Para .tar.gz:

tar -zxvf roberto.tar.gz "arq1.txt" "arq2.txt"

Arquivos com extensão .tar.bz2:

tar -jxvf roberto.tar.bz2 "arq1.txt" "arq2.txt"

Ou então:

tar --extract --file=roberto.tar.gz arq1.txt

Para arquivos .tar.bz2:

tar -jxvf roberto.tar.bz2 arq1.txt

Outra opção é:

tar --extract --file=roberto.tar.bz2 arq1.txt

Extrair Diversos Arquivos de um Mesmo Padrão

Para extrair itens que sigam um mesmo padrão, por exemplo, extrair apenas itens .jpg, utilize wildcards. Veja o exemplo abaixo:

tar -xvf roberto.tar --wildcards '*.txt'

Para .tar.gz você pode usar:

tar -zxvf roberto.tar.gz --wildcards '*.txt'

Comando para .tar.bz2:

tar -jxvf roberto.tar.bz2 --wildcards '*.txt'

Como Adicionar Arquivos em um .tar

Além de poder extrair itens de um arquivo .tar, você também pode adicionar novos. Para isso, utilize a opção -r. O Tar Linux permite adicionar arquivos e diretórios.

Abaixo temos um exemplo de como adicionar o arquivo arq3.txt ao arquivo compactado roberto.tar.

tar -rvf roberto.tar arq3.txt

Também é possível adicionar um diretório. No exemplo abaixo iremos inserir o diretório image_dir dentro de sampleArchive.tar

tar -rvf roberto.tar image_dir

Não é possível adicionar arquivos ou diretórios em arquivos .tar.gz ou .tar.bz2.

Como Verificar o Tamanho de Arquivos no Linux

Depois de criar um arquivo é possível verificar seu tamanho, que será mostrado em KB (Kilobytes).

Abaixo temos exemplos deste comando em diferentes tipos de arquivos:

tar -czf - roberto.tar | wc -c
tar -czf - roberto.tar.gz | wc -c
tar -czf - roberto.tar.bz2 | wc -c

Opções Adicionais

O comando tar oferece várias opções adicionais que podem ser úteis em diferentes situações:

–f: Especifica o nome do arquivo que está sendo manipulado.
–t: Lista o conteúdo do arquivo sem extrair.
–x: Extrai arquivos do arquivo.
–r: Acrescenta arquivos a um arquivo existente.
–u: Atualiza os arquivos no arquivo se eles forem mais novos.
–p: Preserva as permissões originais dos arquivos ao extrair.
–C: Especifica o diretório onde os arquivos serão extraídos.

Outros exemplos interessantes:

Compactar e Excluir Arquivos Originais Simultaneamente com gzip
———————————————————————————————

Se você quiser economizar espaço em disco, pode compactar arquivos e excluir os originais ao mesmo tempo com o uso de um find combinado com gzip:

Exemplo:

find /caminho/para/arquivos -type f -name "*.log" -exec gzip {} \;

Esse comando encontra todos os arquivos com extensão .log no diretório especificado e os compacta usando gzip, removendo os arquivos originais.

 

Compactação Incremental com tar
————————————————

Se você deseja realizar backups incrementais, pode usar o tar para compactar apenas os arquivos que foram modificados após uma data específica.

Exemplo:

tar -czvf backup_incremental.tar.gz --newer-mtime="2023-09-01" /caminho/dos/arquivos

Isso compacta todos os arquivos modificados após 1 de setembro de 2023 no diretório especificado.

 

Compactar e descompactar arquivos com gzip e gunzip
—————————————————————————-

Compactação com gzip:

gzip relatorio.txt

Isso gera o arquivo relatorio.txt.gz.

Descompactação com gunzip:

gunzip relatorio.txt.gz

O arquivo relatorio.txt será restaurado após a descompactação.

Compactar múltiplos arquivos com zip e descompactar com unzip
——————————————————————————————-

Compactação com zip:

zip documentos.zip doc1.txt doc2.txt

Isso cria o arquivo documentos.zip contendo doc1.txt e doc2.txt.Descompactação com unzip:

unzip documentos.zip

Os arquivos doc1.txt e doc2.txt serão extraídos para o diretório atual.

 

Criar e extrair um tarball com tar e gzip
———————————————————

Criação do tarball com compressão gzip:

tar -czvf projetos.tar.gz projetoA/ projetoB/

Isso cria o arquivo projetos.tar.gz contendo os diretórios projetoA e projetoB.

Extração do tarball:

tar -xzvf projetos.tar.gz

Isso extrai os diretórios projetoA e projetoB no diretório atual.

 

Criar um Backup Diário Automatizado com cron e tar
—————————————————————————

Você pode agendar um backup automático de um diretório todos os dias usando tar e a ferramenta cron.

Exemplo:

Edite as tarefas cron:

crontab -e

Adicione uma nova linha para criar um backup diariamente às 2:00 da manhã:

0 2 * * * tar -czvf /backup/diario_$(date +\%F).tar.gz /meu/diretorio

Esse comando cria um backup diário no diretório /backup com o nome baseado na data do dia.


Script Básico para Compactação e Descompactação Automatizada
—————————————————————————————–

Script básico em Bash para compactar e descompactar arquivos, perguntando ao usuário o que ele deseja fazer.

Exemplo de Script:

#!/bin/bash

echo "Escolha uma opção:"
echo "1. Compactar arquivos"
echo "2. Descompactar arquivos"
read opcao

if [ "$opcao" == "1" ]; then
echo "Digite o caminho do arquivo ou diretório que deseja compactar:"
read caminho
echo "Escolha o tipo de compressão:"
echo "1. gzip"
echo "2. bzip2"
echo "3. xz"
read tipo

case $tipo in
1) tar -czvf "${caminho}.tar.gz" "$caminho" ;;
2) tar -cjvf "${caminho}.tar.bz2" "$caminho" ;;
3) tar -cJvf "${caminho}.tar.xz" "$caminho" ;;
*) echo "Opção inválida!" ;;
esac
echo "Arquivo compactado com sucesso!"

elif [ "$opcao" == "2" ]; then
echo "Digite o caminho do arquivo que deseja descompactar:"
read arquivo
if [[ "$arquivo" == *.tar.gz ]]; then
tar -xzvf "$arquivo"
elif [[ "$arquivo" == *.tar.bz2 ]]; then
tar -xjvf "$arquivo"
elif [[ "$arquivo" == *.tar.xz" ]]; then
tar -xJvf "$arquivo"
else
echo "Formato não suportado!"
fi
echo "Arquivo descompactado com sucesso!"

else
echo "Opção inválida!"
fi

Como usar o script:

Salve o conteúdo acima em um arquivo chamado compactacao.sh

Dê permissão de execução:

chmod +x compactacao.sh 

Execute o script:

./compactacao.sh

Esse script interativo permite ao usuário compactar ou descompactar arquivos e escolher o tipo de compressão.

Conclusão

O comando tar é uma ferramenta poderosa para criar, compactar e descompactar arquivos no ambiente Linux. Sua capacidade de trabalhar com outras ferramentas de compactação, como o gzip e o bzip2, o torna uma escolha eficiente para gerenciar arquivos em várias situações. Com a compreensão das opções e sintaxes fornecidas neste artigo, você está pronto para explorar o potencial do tar e aproveitar ao máximo suas funcionalidades.