Domine o Comando Tar: 15 Exemplos Práticos para Linux

O formato tar é amplamente utilizado para o arquivamento de ficheiros em sistemas Unix e Linux.

O nome “tar” deriva de “Tape ARchive”, refletindo a sua origem como uma ferramenta para gravar dados em sequência em dispositivos de fita. É comummente referido como “tarball”.

Por defeito, o tar apenas agrega ficheiros, sem aplicar compressão. No entanto, é possível utilizar diversas técnicas de compressão para gerar um arquivo com tamanho reduzido. O utilitário tar está geralmente incluído nas distribuições Linux e é compatível com outros sistemas operativos, como Windows e macOS, através de diversas ferramentas.

Este artigo abordará exemplos práticos e detalhados do uso do comando tar, incluindo as suas opções mais comuns.

Vamos começar!

Criação de um Arquivo Tar

Para criar um arquivo tar sem compressão, a sintaxe do comando é a seguinte:

$ tar cvf <nome-do-arquivo-tar> <ficheiros-para-arquivar>

Onde: ‘c’ indica criação, ‘v’ exibe uma saída detalhada, e ‘f’ especifica o nome do arquivo tar. A extensão .tar é utilizada por convenção. Os arquivos a serem incluídos podem ser definidos por curingas ou por caminhos e nomes específicos.

Por exemplo, se temos três ficheiros no nosso diretório:

$ ls -l
total 12
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
$

E desejamos criar um arquivo tar com todos eles, o comando seria:

$ tar cvf archive.tar *
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
$

Também é possível escolher arquivos específicos para arquivar:

$ tar cvf archive1.tar file1.txt file2.txt
file1.txt
file2.txt
$ ls -l archive1.tar
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar
$

Criação de Arquivo Comprimido (GZ)

Além de arquivar, o tar também permite comprimir os arquivos, poupando espaço de armazenamento. Um formato popular é o gunzip, usualmente representado pela extensão .gz após .tar, ou tgz. A opção ‘z’ é utilizada para especificar a compressão via gunzip. Veja o exemplo:

$ tar cvzf archive.tar.gz file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair   188 Sep 12 20:21 archive.tar.gz
$

O tamanho dos arquivos comprimidos e não comprimidos é significativamente diferente, apesar de conterem os mesmos ficheiros. Isto ocorre devido à compressão aplicada através da opção ‘z’.

Criação de Arquivo Comprimido (BZ2)

O tar suporta outros formatos de compressão, como o bz2 ou bzip2, representado pela extensão tar.bz2 ou tbz2. Este formato pode gerar arquivos menores, mas com maior consumo de CPU, resultando em processos de compressão e descompressão mais lentos que os arquivos gz.

Exemplo:

$ tar cvjf archive.tar.bz2 file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair   212 Sep 12 20:25 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair   188 Sep 12 20:21 archive.tar.gz
$ file archive.tar*
archive.tar:     POSIX tar archive (GNU)
archive.tar.bz2: bzip2 compressed data, block size = 900k
archive.tar.gz:  gzip compressed data, from Unix, original size modulo 2^32 10240
$

Descompressão de Todos os Ficheiros

Para extrair todos os ficheiros de um arquivo tar (comprimido ou não), utiliza-se a opção ‘x’. Os exemplos abaixo demonstram o seu uso:

$ tar xvf archive.tar
file1.txt
file2.txt
file3.txt
$ ls -l
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair    13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair    19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair    24 Sep 12 20:08 file3.txt
$

O mesmo processo é válido para arquivos gz:

$ tar xvf archive.tar.gz
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Ou para arquivos bz2:

$ tar xvf archive.tar.bz2
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Listagem do Conteúdo de um Tar

Para listar o conteúdo de um arquivo tar, utilize a opção ‘t’, como demonstrado abaixo:

$ tar tvf archive.tar.bz2
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$

Descompressão de Ficheiros Específicos

Para extrair apenas um ficheiro de um arquivo tar, tar.gz ou tar.bz2, especifique o nome do ficheiro:

$ tar xvf archive.tar.bz2 file1.txt
file1.txt
$ ls -l
total 8
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
$

Para extrair múltiplos ficheiros, basta listá-los, separados por espaços:

$ tar xvf archive.tar.bz2 file1.txt file3.txt
file1.txt
file3.txt
$ ls -l
total 12
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Descompressão Utilizando Curingas

Para extrair um ou mais ficheiros que correspondam a um padrão (curinga), utilize a opção ‘–wildcards’:

$ tar xvf archive.tar.bz2 --wildcards "file*"
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Adição de Ficheiros a um Arquivo Tar

Para adicionar novos ficheiros a um arquivo tar não comprimido, use a opção ‘r’ ou ‘–append’ com o nome do ficheiro ou um padrão curinga (este método apenas funciona com arquivos .tar, não com formatos comprimidos tar.gz ou tar.bz2):

$ tar rvf archive.tar file-new*
file-new.txt
file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new2.txt
$

Ao listar o conteúdo do archive.tar novamente, os dois arquivos adicionados estarão visíveis.

Remoção de Ficheiros de um Arquivo

Para remover ficheiros de um arquivo tar, utilize a opção ‘–delete’ (compare a lista de ficheiros antes e depois da remoção):

$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new2.txt
$ tar --delete -f archive.tar file-new.txt file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
$

Esta operação só é válida para arquivos tar não comprimidos.

Criação com Verificação

Ao criar um arquivo tar não comprimido, é possível verificar o conteúdo utilizando a opção ‘W’:

$ tar cvfW archive.tar file*.txt
file1.txt
file2.txt
file3.txt
Verify file1.txt
Verify file2.txt
Verify file3.txt
$

Esta opção não pode ser utilizada em conjunto com as opções de compressão, embora o arquivo tar criado possa ser comprimido posteriormente.

Extração de um Tar para uma Pasta Específica

Para extrair o conteúdo de um arquivo tar para uma pasta específica e não no diretório atual, use a opção ‘-C’ seguida do caminho da pasta:

$ tar xvf archive.tar -C new-directory/
file1.txt
file2.txt
file3.txt
file2.txt
file4.txt
$ ls -l new-directory/
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt
$

Utilização da Opção de Diferença

As opções ‘–diff’ ou ‘d’ podem ser utilizadas para encontrar diferenças entre os ficheiros dentro do arquivo tar e os do sistema de ficheiros. O seguinte exemplo mostra a execução do ‘diff’ quando os ficheiros dentro e fora do tar são iguais. Após a atualização do ficheiro, o comando foi executado novamente, mostrando as diferenças.

$ tar dvf archive.tar file4.txt
file4.txt
$
$ echo newline > file4.txt
$
$ tar dvf archive.tar file4.txt
file4.txt
file4.txt: Mod time differs
file4.txt: Size differs
$

Exclusão de Ficheiros

A exclusão de ficheiros específicos pode ser necessária ao criar arquivos tar. Isto pode ser feito com a opção ‘–exclude’.

$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/
dir/
dir/file1.txt
dir/file3.txt
$ ls -l dir
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt
$ tar tvf archive.tar.gz
drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/
-rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt
-rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt
$

É possível especificar a opção ‘–exclude’ várias vezes para indicar diversos ficheiros ou padrões. No exemplo acima, dos seis arquivos no diretório, apenas dois foram incluídos em archive.tar.gz.

Visualização do Tamanho do Conteúdo Tar

O tamanho do conteúdo de um arquivo tar comprimido pode ser obtido com os seguintes comandos:

$ tar tvf archive.tar.gz
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$ tar -xzf archive.tar.gz --to-stdout|wc -c
56
$

De forma similar, para ficheiros bz2:

$ tar tvf archive.tar.bz2
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$ tar -xjf archive.tar.bz2 --to-stdout|wc -c
56
$

Preservação de Permissões

Por defeito, o comando tar preserva as permissões de ficheiros e diretórios ao criar um arquivo. No entanto, é possível especificar explicitamente essa ação com a opção ‘-p’ ou ‘–preserve-permissions’:

$ tar cvpzf archive.tar.gz *.txt
file1.txt
file2.txt
file3.txt
$

Resumo 👨‍💻

O tar é uma ferramenta essencial em sistemas Unix/Linux, utilizada há muito tempo para tarefas de arquivamento e backup. O utilitário evoluiu com diversas opções ao longo do tempo, sendo útil para tarefas simples ou complexas. Este artigo apresentou algumas das operações básicas do comando tar, ilustrando como ele pode auxiliar nas tarefas diárias de administração de sistemas.

Para mais detalhes, consulte a página ‘man’ do comando ‘tar’ (man tar) ou utilize ‘tar –help’ ou ‘tar –usage’.