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…
últimas postagens
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.
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.
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.
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.