15 exemplos de comando tar para administradores de sistema e desenvolvedores

Publicados: 2021-09-21

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

O próprio nome é derivado de T ape AR chive, pois foi desenvolvido para gravar dados sequenciais em dispositivos de fita. Às vezes também é conhecido como tarball.

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 é normalmente incluído na maioria das distribuições Linux por padrão, e o formato em si é compatível com outros sistemas operacionais, incluindo Windows e macOS, por meio de diferentes ferramentas e utilitários.

Cobriremos alguns dos exemplos comuns e do uso do comando tar e seus sinalizadores com suporte neste artigo.

Então vamos começar…

Criar arquivo tar

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

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

Aqui, os sinalizadores c significam criação, v para saída detalhada f para especificar o nome do arquivo tar. Por convenção, especifique o nome do arquivo tar com extensão .tar . Os arquivos a serem arquivados podem ser especificados com curingas ou como nomes / caminhos de arquivo ú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 $

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)

O tar não só permite o arquivamento de arquivos, mas também a compactação deles para economizar espaço. Um dos formatos de compactação populares é o gunzip, geralmente representado pela extensão .gz após .tar ou como tgz . Podemos usar o sinalizador z para especificar que precisamos que os arquivos sejam compactados usando 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 com 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 . Pode dar a você um tamanho de arquivo menor, mas por sua vez consome mais CPU, então 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 $

Descompacte todos os arquivos

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

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 $

Arquivos específicos de descompactação

Apenas um arquivo pode ser extraído de um 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 $

Descompacte usando curinga

Para extrair um ou mais arquivos usando um PATTERN curinga, use a sinalizaçã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 $

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 a listagem do conteúdo de archive.tar mostra novamente os dois arquivos recém-adicionados.

Excluir arquivos do arquivo

A remoção de arquivos específicos de um arquivo tar é possível usando --delete flag como mostrado abaixo (compare a lista tar antes e depois da exclusão dos 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 não compactados 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 $

Use a bandeira diff

Você pode usar --diff ou d flag para encontrar quaisquer mudanças entre os arquivos no pacote tar e aqueles no sistema de arquivos. Aqui está um exemplo que executa o diff uma vez quando o arquivo dentro do tar e fora dele é o mesmo. Após a atualização do arquivo, ele foi executado mais uma vez 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

A exclusão de arquivos específicos pode ser um requisito durante a criação de arquivos tar. Isso pode ser feito 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 dir no exemplo acima, apenas dois arquivos satisfazem a condição de serem incluídos em archive.at.gz .

Ver o tamanho do conteúdo 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 como 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. Pode ser usado para tarefas simples a complexas, desde que você conheça os recursos que oferece. Este artigo abordou algumas das operações básicas que você pode realizar com o comando tar e mostra como ele pode ajudá-lo nas tarefas diárias de administração do sistema.

Consulte sua página de man tar ou use o comando tar --help ou tar --usage para obter mais detalhes.