Idioma
Categoria
Pesquisar

Exemplos do comando Tar no Linux

O comando tar é utilizado para agrupar, compactar e descompactar arquivos no Linux sendo muito útil para manipulação de backups

Em Terminal Por Rudi Drusian Lange
Publicado em
Última atualização

O comando tar é utilizado para reunir uma coleção de arquivos e diretórios em um único arquivo somente agrupado ou altamente comprimido chamado normalmente de "tarball". Tar é o comando mais amplamente utilizado para compactar e descompactar arquivos e diretórios tornando fácil o transporte de informações de disco para disco ou de maquina para maquina.

Neste artigo serão apresentados diversos exemplos do comando tar, incluindo compactar arquivos e pastas, descompactar tudo ou extrair somente um arquivo, ver o conteúdo de um arquivo, adicionar arquivos ou diretórios a um arquivo compactado etc.

Criando um arquivo tar

O exemplo abaixo irá mostrar como criar um arquivo tar com o nome "documentos-2017-07-05.tar" a partir do diretório documentos.

$ Shell

// Antes de executar o comando vamos checar os arquivos dentro do diretório que utilizaremos como exemplo - "documentos"
ls -lh documentos/

total 1.5M
-rw-r--r-- 1 rudi users  63K Nov 30  2015 banner1.jpg
-rw-r--r-- 1 rudi users  24K Jun 21 11:21 Estoque.xlsx
-rw-r--r-- 1 rudi users  16K Nov  7  2013 Funcionalidades WFS.doc
-rw-r--r-- 1 rudi users 622K Feb  8  2013 Planilha_de_Objetos.xls
-rw-r--r-- 1 rudi users 2.5K Feb  8 12:57 Roadmap
-rw-r--r-- 1 rudi users 301K Jun 22 10:23 servidores.doc
-rw-r--r-- 1 rudi users 403K Jan 18  2013 snmp oid.xls


// Agora vamos agrupar o diretórios e seus arquivos com o comando tar
tar -cvf documentos-2017-07-05.tar documentos/

documentos/
documentos/servidores.doc
documentos/Estoque.xlsx
documentos/Planilha_de_Objetos.xls
documentos/snmp oid.xls
documentos/Roadmap
documentos/banner1.jpg
documentos/Funcionalidades WFS.doc

// Listando o arquivo gerado
ls -lh

total 1.5M
drwxr-xr-x 2 rudi users 4.0K Jul  5 11:47 documentos
-rw-r--r-- 1 rudi users 1.5M Jul  5 11:48 documentos-2017-07-05.tar

O comportamento do comando tar é manipulado com a alteração dos parâmetros adicionais utilizados no comando. Abaixo a descrição dos parâmetros usados no exemplo acima:

  • c - cria um novo arquivo tar
  • v - mostra o progresso do comando na tela
  • f - indica o nome do arquivo tar que será gerado

A primeira coisa a se reparar nos comandos acima é o tamanho dos arquivos antes da utilização do comando tar e o tamanho do arquivo tar gerado. O tamanho é exatamente o mesmo, 1.5M, isso quer dizer que os arquivos foram agrupados e não compactados. Com o tar é possível somente agrupar arquivos sem compactá-los, isso pode ser extremamente útil pois o comando é executado rapidamente e gera um arquivo único para transporte.

Criando um arquivo tar.gz

Para criar um arquivo gz(gzip) compactado utilize a opção "z". Abaixo será agrupado o mesmo diretório do primeiro exemplo agora com compactação.

$ Shell

tar -cvzf documentos-2017-07-05.tar.gz documentos/

documentos/
documentos/servidores.doc
documentos/Estoque.xlsx
documentos/Planilha_de_Objetos.xls
documentos/snmp oid.xls
documentos/Roadmap
documentos/banner1.jpg
documentos/Funcionalidades WFS.doc

ls -lh

total 1.9M
drwxr-xr-x 2 rudi users 4.0K Jul  5 11:47 documentos
-rw-r--r-- 1 rudi users 1.5M Jul  5 11:48 documentos-2017-07-05.tar
-rw-r--r-- 1 rudi users 442K Jul  5 11:49 documentos-2017-07-05.tar.gz

Utilizando a compactação gzip o tamanho do arquivo foi diminuído para 442K, assim além de agrupá-los também foram compactados diminuindo seu tamanho para menos da metade da soma dos tamanhos dos arquivos originais. A quantidade de compactação depende do tipo de arquivo, por exemplo, planilhas e arquivos textos são altamente compactáveis enquanto imagens, vídeos e arquivos PDFs entre outros utilizam formatos compactados por padrão e terão compactação mínima ou até nenhuma dependendo do caso

Criando um arquivo tar.bz2

Compactar com bz2(BZIP2) cria um arquivo com grau de compactação maior do que utilizando gzip, por isso demora mais tempo compactando do que com a opção gzip. A descompactação leva aproximadamente o mesmo tempo utilizando ambas as opções, gzip ou bzip2. Para criar um arquivo altamente compactado com bzip2 utilize o parâmetro "j". Lembre-se de substituir o parâmetro "z" referente a compactação gzip do último exemplo acima pelo parâmetro "j" para que a compactação utilize bzip2.

$ Shell

tar -cvjf documentos-2017-07-05.tar.bz2 documentos/

documentos/
documentos/servidores.doc
documentos/Estoque.xlsx
documentos/Planilha_de_Objetos.xls
documentos/snmp oid.xls
documentos/Roadmap
documentos/banner1.jpg
documentos/Funcionalidades WFS.doc

ls -lh

total 2.7M
drwxr-xr-x 2 rudi users 4.0K Jul 5 2017 documentos
-rw-r--r-- 1 rudi users 1.5M Oct 5 00:32 documentos-2017-07-05.tar
-rw-r--r-- 1 rudi users 431K Oct 5 00:33 documentos-2017-07-05.tar.bz2
-rw-r--r-- 1 rudi users 442K Oct 5 00:32 documentos-2017-07-05.tar.gz

O arquivo compactado com bzip2 ficou com 431K enquanto a compactação feita com gzip ficou com 442K. O grau de compactação irá depender dos arquivos que são compactados. Quanto maior a quantidade de arquivos a serem compactados maior será o ganho de tamanho do arquivo a ser gerado em comparação com o gzip.

Criando um arquivo tar.xz

Para criar um arquivo xz compactado utilize a opção "J". A compactação xz possui a maior compactação dentre as opções demonstradas neste tutorial, os programas disponibilizados pela distribuição Slackware utilizam este formato, porém ao em vez de utilizar a extensão ".tar.xz" utiliza a extensão reduzida ".txz".

$ Shell

tar -cvJf documentos-2017-07-05.tar.xz documentos/

documentos/
documentos/servidores.doc
documentos/Estoque.xlsx
documentos/Planilha_de_Objetos.xls
documentos/snmp oid.xls
documentos/Roadmap
documentos/banner1.jpg
documentos/Funcionalidades WFS.doc

ls -lh

total 2.7M
drwxr-xr-x 2 rudi users 4.0K Jul 5 2017 documentos
-rw-r--r-- 1 rudi users 1.5M Oct 5 00:32 documentos-2017-07-05.tar
-rw-r--r-- 1 rudi users 431K Oct 5 00:33 documentos-2017-07-05.tar.bz2
-rw-r--r-- 1 rudi users 442K Oct 5 00:32 documentos-2017-07-05.tar.gz
-rw-r--r-- 1 rudi users 369K Oct 5 00:29 documentos-2017-07-05.tar.xz

O maior grau de compactação foi apresentado com a utilização do xz, o tamanho final do arquivo ficou em 369K.

Escolhendo onde o arquivo compactado será criado

Utilizando os exemplos acima como referência, para compactar o diretório "documentos" e salvar o arquivo compactado gerado em outro diretório, por exemplo dentro de "/home/backup/", basta incluir o diretório no nome do arquivo, como no exemplo abaixo:

$ Shell

tar -cvjf /home/backup/documentos-2017-07-05.tar.bz2 documentos/

documentos/
documentos/servidores.doc
documentos/Estoque.xlsx
documentos/Planilha_de_Objetos.xls
documentos/snmp oid.xls
documentos/Roadmap
documentos/banner1.jpg
documentos/Funcionalidades WFS.doc

ls -lh /home/backup/

total 432K
-rw-r--r-- 1 rudi users 431K Jul  5 12:41 documentos-2017-07-05.tar.bz2

Caminhos e diretórios

Nos exemplos até agora o diretório com os arquivos que estão sendo compactados é chamado "documentos". Este diretório esta dentro do caminho /home/rudi/Download/. Antes de executar os comandos foi necessário acessar este diretório "cd /home/rudi/Download/" e depois executar os comandos para a compactação.

Com o mesmo comando dos últimos exemplos é possível compactar independente da localização atual onde o comando é executado. Por exemplo, estando no diretório "/home/backup/", para compactar o diretório "documentos" utiliza-se o comando:

$ Shell

// Entra no diretório do exemplo
cd /home/backup/

// Compacta o diretório documentos
tar -cvjf documentos-2017-07-05.tar.bz2 /home/rudi/Downloads/documentos/

tar: Removing leading `/' from member names
/home/rudi/Downloads/documentos/
/home/rudi/Downloads/documentos/servidores.doc
/home/rudi/Downloads/documentos/Estoque.xlsx
/home/rudi/Downloads/documentos/Planilha_de_Objetos.xls
/home/rudi/Downloads/documentos/snmp oid.xls
/home/rudi/Downloads/documentos/Roadmap
/home/rudi/Downloads/documentos/banner1.jpg
/home/rudi/Downloads/documentos/Funcionalidades WFS.doc

O arquivo compactado com o comando acima foi criado dentro do diretório "/home/backup" armazenando a estrutura do caminho para chegar ao diretório "documentos". Ao descompactar o arquivo dentro do diretório "/home/backup/" o caminho para a pasta documentos será: "/home/backup/home/rudi/Downloads/documentos/".

É possível notar uma mensagem informativa logo após o último comando: "tar: Removing leading `/' from member names" - essa mensagem informa que a primeira "/" do caminho "/home/rudi/Downloads/documentos/" foi removida ao executar a compactação. Esta alteração é feita por segurança para que quando descompactar o arquivo este não seja extraído no diretório "/home/rudi/Downloads/documentos/" o que substituiria os arquivos originais, ao em vez de "/home/backup/home/rudi/Downloads/documentos/" como demonstrado no exemplo acima.

Caso haja a necessidade de manter a primeira "/" alterando o comportamento padrão do comando tar, basta utilizar o parâmetro "-P", assim o diretório será extraído no caminho original.

$ Shell

tar -P -cvjf documentos-2017-07-05.tar.bz2 /home/rudi/Downloads/documentos/

Imagine que seja feito uma backup do diretório "/etc" e depois seja necessário extrair o backup somente para consultar um arquivo antigo. Utilizando o parâmetro "-P" durante a compactação, ao extrair serão substituídos os arquivos originais do diretório "/etc" o que pode ser um grande problema pois todas as modificações feitas após o último backup serão perdidas.

Uma possibilidade interessante é dizer ao comando tar para entrar em um diretório antes da efetuar a compactação, assim o caminho completo não será armazenado. Para isso utiliza a opção "-C" seguida do diretório desejado. Exemplo:

$ Shell

// Diretório atual: /home/backup Compactando o diretório "documentos" sem o caminho completo
tar -C /home/rudi/Downloads/ -cvjf documentos-2017-07-05.tar.bz2 documentos

documentos/
documentos/servidores.doc
documentos/Estoque.xlsx
documentos/Planilha_de_Objetos.xls
documentos/snmp oid.xls
documentos/Roadmap
documentos/banner1.jpg
documentos/Funcionalidades WFS.doc

// Compactando somente os arquivos dentro do diretório "documentos"
tar -C /home/rudi/Downloads/documentos -cvjf documentos-2017-07-05.tar.bz2 .

./
./servidores.doc
./Estoque.xlsx
./Planilha_de_Objetos.xls
./snmp oid.xls
./Roadmap
./banner1.jpg
./Funcionalidades WFS.doc

No primeiro exemplo é compactada a pasta "documentos" com todos os arquivos dentro, no segundo exemplo são compactados somente os arquivos sem a pasta "documentos".

Descompactar: tar, gz, bz2 e xz

Para descompactar um arquivo com o comando tar substituí-se o parâmetro "c" que podemos pensar como criar/create pelo parâmetro "x" que podemos pensar como extrair/extract. Não é necessário indicar o tipo de compactação(tar, gzip, bzip2, xz).

$ Shell

// Desagrupando tar
tar -xvf documentos-2017-07-05.tar

// Descompactando gzip (gz)
tar -xvf documentos-2017-07-05.tar.gz

// Descompactando bzip2 (bz2)
tar -xvf documentos-2017-07-05.tar.bz2

// Descompactando xz tar -xvf documentos-2017-07-05.tar.xz // Para indicar o diretório em que o arquivo será descompactado utilize o parâmetro -C tar -xvf documentos-2017-07-05.tar.bz2 -C /home/backup/ // Os resultados de todos os comandos acima são iguais documentos/ documentos/servidores.doc documentos/Estoque.xlsx documentos/Planilha_de_Objetos.xls documentos/snmp oid.xls documentos/Roadmap documentos/banner1.jpg documentos/Funcionalidades WFS.doc

Listar conteúdo: tar, gz, bz2 e xz

Para listar o conteúdo utiliza-se o parâmetro "t" substituindo os parâmetros "c" ou "x". Os parâmetros utilizados são os mesmos para os 4 tipos de arquivo. Exemplos:

$ Shell

// Tar
tar -tvf documentos-2017-07-05.tar

// Gzip
tar -tvf documentos-2017-07-05.tar.gz

// Bzip2
tar -tvf documentos-2017-07-05.tar.bz2

// Xz tar -tvf documentos-2017-07-05.tar.xz // Os resultados de todos os comandos acima são iguais drwxr-xr-x rudi/users 0 2017-07-05 11:47 documentos/ -rw-r--r-- rudi/users 308224 2017-06-22 10:23 documentos/servidores.doc -rw-r--r-- rudi/users 24230 2017-06-21 11:21 documentos/Estoque.xlsx -rw-r--r-- rudi/users 636928 2013-02-08 12:08 documentos/Planilha_de_Objetos.xls -rw-r--r-- rudi/users 412672 2013-01-18 06:18 documentos/snmp oid.xls -rw-r--r-- rudi/users 2539 2017-02-08 12:57 documentos/Roadmap -rw-r--r-- rudi/users 63661 2015-11-30 11:30 documentos/banner1.jpg -rw-r--r-- rudi/users 16384 2013-11-07 11:00 documentos/Funcionalidades WFS.doc

Descompactar um único arquivo

Os comandos abaixo são válidos para qualquer das extensões: tar, tar.gz, tar.bz2 e tar.xz.

Shell

tar -xvf documentos-2017-07-05.tar documentos/Roadmap

documentos/Roadmap

// Forma alternativa do comando, mesmo resultado
tar --extract --file=documentos-2017-07-05.tar documentos/banner1.jpg

Descompactar múltiplos arquivos

O procedimento é o mesmo de extrair um único arquivo somente colocando os arquivos adicionais separados por espaço.

$ Shell

tar -xvf documentos-2017-07-05.tar.bz2 "documentos/Roadmap" "documentos/banner1.jpg"

documentos/Roadmap
documentos/banner1.jpg

Extrair grupos de arquivos utilizando wildcards

Para descompactar um grupo de arquivos utiliza-se o parâmetro "--wildcards" seguida da expressão desejada. O comando abaixo extrai todos os arquivos com extensão "xls" a partir do arquivo compactado.

$ Shell

tar -xvf documentos-2017-07-05.tar.bz2 --wildcards "*.xls"

documentos/Planilha_de_Objetos.xls
documentos/snmp oid.xls

Adicionando arquivos ou diretórios a um arquivo tar

Importante! Este comando só funciona para arquivo .tar, o mesmo não irá funcionar para arquivos .tar.gz, .tar.bz2 ou tar.xz. Para adicionar um arquivo ou diretório a um arquivo agrupado com tar utiliza-se a opção "r" em substituição as opções "c", "x" ou "t".

$ Shell

// Adicionando arquivo
tar -rvf documentos-2017-07-05.tar telazul.txt 
telazul.txt

// Adicionando diretório
tar -rvf documentos-2017-07-05.tar manual

manual/
manual/Monitoramento de Oracle.pdf
manual/Monitoramento de Microsoft SQL Server.pdf
manual/Monitoramento de Sistemas Operacionais Windows.pdf

Tar: Opções e uso

  • c - cria um novo arquivo
  • x - extrai um arquivo
  • v - mostra o progresso na tela
  • f - nome do arquivo(filename)
  • t - visualiza o conteúdo do arquivo
  • j - indica o uso de compactação com bzip2 (.tar.bz)
  • J - indica o uso de compactação com xz (.tar.xz)
  • z - indica o uso de compactação com gzip (.tar.gz)
  • r - adiciona ou atualiza arquivos ou diretórios a um arquivo tar existente
  • wildcards - possibilita uso de expressões no comando tar

Considerações finais

Os exemplos acima cobrem boa parte das funcionalidades do comando tar, para maiores informações consulte o manual.

Referências