15 exemplos de comandos tar para administradores de sistemas e desenvolvedores

tar é um dos formatos populares de arquivamento de arquivos disponíveis em sistemas baseados em Unix e Linux.

O próprio nome é derivado de Tape ARchive, pois foi desenvolvido para gravar dados sequenciais em dispositivos de fita. Também é conhecido como tarball às vezes.

Por padrão, o tar apenas arquiva os arquivos sem compactação, mas usando algumas partes. Podemos usar diferentes técnicas de compactação para obter uma saída compactada. O utilitário tar geralmente é incluído na maioria das distribuições do Linux por padrão, e o próprio formato é suportado em outros sistemas operacionais, incluindo Windows e macOS, por meio de diferentes ferramentas e utilitários.

Abordaremos alguns dos exemplos comuns e uso do comando tar e seus sinalizadores suportados neste artigo.

Então vamos começar…

Criar arquivo tar

Para criar um arquivo descompactado simples, a sintaxe do comando tar é:

$ tar cvf <tar-file-name> <files-to-archive>

Aqui sinalizadores c significa criação, v para saída detalhada e f para especificar o nome do arquivo tar. Por convenção, especifique o nome do arquivo tar com a extensão .tar. Os arquivos a serem arquivados podem ser especificados com curingas ou como nomes/caminhos de arquivos únicos ou múltiplos.

Por exemplo, tenho três arquivos em meu 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 eu quero criar um arquivo tar contendo todos os três arquivos, isso pode ser feito como:

$ 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 posso especificar apenas arquivos específicos para arquivar, como:

$ 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
$

Criar arquivo compactado (GZ)

tar não só permite arquivar arquivos, mas também comprimi-los para economizar espaço. Um dos formatos de compactação populares é o gunzip, geralmente representado pela extensão .gz depois de .tar ou como tgz. Podemos usar o sinalizador z para especificar que precisamos que os arquivos sejam compactados usando o gunzip. Aqui está um 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
$

Você pode observar que o tamanho de ambos os arquivos compactados é substancialmente diferente, embora ambos contenham os mesmos três arquivos. Isso se deve ao uso de compactação usando o sinalizador z.

  Como reparar o Microsoft Visual C++ redistribuível

Criar arquivo compactado (BZ2)

tar suporta vários outros formatos de compressão. Um deles é bz2 ou bzip2 que é representado pela extensão tar.bz2 ou às vezes como tbz2. Ele pode fornecer um tamanho de arquivo menor, mas, por sua vez, consome mais CPU; portanto, o processo de compactação/descompactação pode ser mais lento do que o arquivo 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
$

Descompactar todos os arquivos

Um arquivo tar (seja compactado ou descompactado) pode ser extraído simplesmente usando a opção x. Os exemplos abaixo esclarecerã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
$

Isso funciona para um arquivo compactado gz como:

$ 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 mesmo para um arquivo compactado bz2 como:

$ 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
$

Listar o conteúdo do tar

Para listar o conteúdo de um arquivo tar, você pode usar o sinalizador t conforme mostrado 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
$

Descompactar Arquivos Específicos

Apenas um arquivo pode ser extraído de um arquivo tar ou tar.gz ou tar.bz2 especificando o nome do arquivo como:

$ 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
$

Da mesma forma, você pode especificar vários nomes de arquivo separados por espaço para extraí-los juntos de uma só vez.

$ 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
$

Descompactar usando curinga

Para extrair um ou mais arquivos usando um PATTERN curinga, use o sinalizador –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
$

Adicione pastas ao arquivo

Novos arquivos podem ser adicionados/anexados a tarballs descompactados existentes usando r ou –append sinalizador com novos nomes de arquivo ou padrão curinga (lembre-se de que isso só funciona com arquivos .tar descompactados e não com formatos compactados 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
$

Você pode observar que listar o conteúdo de archive.tar novamente mostra os dois arquivos recém-adicionados.

  As 5 principais ferramentas de código aberto para gerenciar o servidor OpenStack

Excluir arquivos do arquivo

A remoção de arquivos específicos de um arquivo tar é possível usando o sinalizador –delete conforme mostrado abaixo (compare a listagem tar pré e pós exclusão de arquivos):

$ 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
$

Novamente, isso funciona apenas para tarballs descompactados e falhará para formatos de arquivo compactados.

Criar com Verificar

Ao criar arquivos tar descompactados, você pode verificar o conteúdo do arquivo usando o sinalizador W como:

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

Isso não pode ser usado com sinalizadores de compactação, embora você possa compactar o arquivo tar criado posteriormente usando gzip ou outras ferramentas.

Extrair tar para a pasta

Se você deseja extrair o conteúdo do tarball para uma pasta específica em vez do diretório atual, use o sinalizador -C com o caminho do diretório, conforme mostrado abaixo:

$ 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
$

Usar sinalizador de diferença

Você pode usar –diff ou d flag para encontrar quaisquer alterações entre os arquivos no arquivo tar e os do sistema de arquivos. Aqui está um exemplo que executa o diff uma vez quando o arquivo dentro e fora do tar é o mesmo. Após a atualização do arquivo, ele foi executado novamente para mostrar a diferença na saída.

$ 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
$

Excluir arquivos

Excluir arquivos específicos pode ser um requisito ao criar arquivos tar. Isso pode ser obtido com o sinalizador –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
$

Como você pode observar na saída acima, podemos especificar o sinalizador –exclude várias vezes para especificar vários nomes de arquivo ou padrões na condição AND. Observe que dos seis arquivos no diretório do exemplo acima, apenas dois arquivos satisfizeram a condição de serem incluídos em archive.at.gz.

  Todas as maneiras como sua localização pode ser rastreada em um iPhone

Ver tamanho do conteúdo tar

Podemos obter o tamanho do conteúdo de um arquivo tar compactado usando o comando abaixo:

$ 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
$

Da mesma forma para o arquivo 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
$

Preservar permissões

Por padrão, o comando tar preserva a permissão de arquivos e diretórios que está arquivando, embora você possa especificar explicitamente o mesmo usando -p flag ou –preserve-permissions conforme mostrado abaixo:

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

Resumo 👨‍💻

tar é um utilitário útil em sistemas Unix/Linux por muito tempo e foi usado principalmente em tarefas de arquivamento e backup. O utilitário evoluiu com muitas opções ao longo do tempo. Ele pode ser usado para tarefas simples a complexas, desde que você conheça os recursos que ele oferece. Este artigo abordou algumas das operações básicas que você pode fazer com o comando tar e mostra como ele pode ajudá-lo em suas tarefas diárias de administração do sistema.

Consulte a página man man tar ou use o comando tar –help ou tar –usage para obter mais detalhes.