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’.