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.