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.