tar - Linux

O comando tar (abreviação de "tape archive" ou "arquivo de fita") permite combinar vários arquivos em um único arquivamento de arquivos. Ele possui a seguinte sintaxe:

tar [opções] [nome_do_arquivo] [arquivos ou pastas para arquivamento]

Primeiro, o comando recebe um conjunto de opções. Em seguida, o nome do arquivo no qual os arquivos/pastas devem ser colocados ou do qual devem ser extraídos. O último parâmetro representa o caminho para os arquivos ou diretórios que precisam ser arquivados ou desarquivados.

As opções permitem controlar o comportamento do comando e indicam o que queremos fazer. Como há muitas opções, vou listar as mais usadas:

  • -c, --create: cria um arquivo

  • --delete: exclui o conteúdo do arquivo

  • -d, --diff, --compare: compara arquivos

  • -r, --append: adiciona arquivos ao final do arquivo

  • -t, --list: exibe o conteúdo do arquivo

  • -x, --extract, --get: extrai arquivos do arquivo

  • -f, --file=ARCHIVE: usa ARCHIVE como nome do arquivo

  • -v, --verbose: exibe uma lista detalhada dos arquivos processados

  • --overwrite: sobrescreve arquivos ao extrair

  • --overwrite-dir: sobrescreve diretórios ao extrair

  • --remove-files: exclui arquivos ao adicioná-los ao arquivo

Suponha que no diretório inicial do usuário existam os seguintes arquivos:

  • hello.txt

  • image.png

  • index.html

Vamos arquivar esses arquivos em um arquivo chamado "archive.tar":

programicio@Programicio:~$ tar -cvf archive.tar hello.txt image.png index.html
hello.txt
image.png
index.html

Neste caso, o comando tar recebe três opções: -c (criar arquivo), -v (exibir detalhes da operação) e -f (definir o nome do arquivo de arquivo).

É considerado que estamos no diretório inicial e os arquivos a serem arquivados estão neste diretório, e o arquivo de arquivo é criado neste diretório. No entanto, os caminhos podem variar. Para esse caso, podemos passar os caminhos completos dos arquivos. Por exemplo, se os arquivos estiverem na pasta "Documents":

tar -cvf ~/archive.tar ~/Documents/hello.txt ~/Documents/image.png ~/Documents/index.html

Vamos obter informações sobre o arquivo criado:

programicio@Programicio:~$ tar -tvf archive.tar
-rw-rw-r-- programicio/programicio  1572 2024-03-09 11:39 hello.txt
-rw-rw-r-- programicio/programicio 177489 2024-02-26 09:49 image.png
-rw-rw-r-- programicio/programicio     67 2024-02-23 23:07 index.html

Vamos descompactar o arquivo criado:

programicio@Programicio:~$ tar -xvf archive.tar
hello.txt
image.png
index.html

De forma similar, podemos arquivar diretórios: Por exemplo, para arquivar o diretório inicial do usuário em um arquivo /tmp/home.tar:

tar -cvf /tmp/home.tar /home

É possível até mesmo criar um backup de todo o sistema, arquivando vários diretórios:

tar -cvf /tmp/system-backup.tar /home /srv /root /var

Adicionando Compressão

Vale notar que a criação de um arquivo tar combina vários arquivos ou diretórios em um único pacote, mas não os comprime. Para comprimir arquivos, o comando tar deve receber as opções correspondentes:

  • -z: utiliza a ferramenta gzip para compressão

  • -j: utiliza a ferramenta bzip2 para compressão

Por exemplo, vamos arquivar arquivos usando compressão gzip:

tar -czvf archive.tar.gz hello.txt image.png index.html

Isso cria um arquivo archive.tar.gz. Para descompactá-lo, o processo é o mesmo que para um arquivo sem compressão:

tar -xvf archive.tar.gz

Podemos chamar componentes de criação e compressão de arquivos separadamente, construindo uma cadeia de comandos:

tar -cvf test.tar test | bzip2 -9 -c > test.tar.bz2

Aqui, a execução é dividida em três partes. Primeiro, criamos o arquivo test.tar a partir da pasta test:

tar -cvf test.tar test

Depois, comprimimos este arquivo usando a ferramenta bzip2, aplicando o nível de compressão 9 (máxima compressão) e a opção -c (compressão):

bzip2 -9 -c

Finalmente, redirecionamos o resultado da ferramenta bzip2 para o arquivo test.tar.bz2, criando assim um arquivo comprimido.

Gerenciamento de nomes

Ao criar um arquivo tar, todos os arquivos e diretórios são armazenados com seus caminhos completos. Por exemplo, suponha que no diretório Documents exista a pasta test que queremos arquivar:

programicio@Programicio:~$ tar -cvf archive.tar ~/Documents/test
tar: Removing leading `/' from member names
/home/programicio/Documents/test/
/home/programicio/Documents/test/image.png
/home/programicio/Documents/test/index.html
/home/programicio/Documents/test/hello.txt
/home/programicio/Documents/test/output.txt

Aqui, cada arquivo da pasta test é salvo no arquivo com o caminho /home/programicio/Documents/test. Agora, vamos descompactar o arquivo:

programicio@Programicio:~$ tar -xvf archive.tar
/home/programicio/Documents/test/
/home/programicio/Documents/test/image.png
/home/programicio/Documents/test/index.html
/home/programicio/Documents/test/hello.txt
/home/programicio/Documents/test/output.txt

Como resultado, será criada uma pasta /home/programicio/Documents/test/ no diretório atual, contendo os arquivos da pasta test.

Se quisermos descompactar o arquivo na pasta test ou diretamente na pasta atual, temos duas opções:

  • Mudar para o diretório que contém os arquivos a serem arquivados e executar o comando tar a partir desse diretório, evitando assim a adição dos caminhos completos aos arquivos.

  • Usar a opção -C ao criar o arquivo, o que permite incluir apenas os nomes relativos dos arquivos e diretórios no arquivo.

Por exemplo, usando a segunda opção:

programicio@Programicio:~$ tar -cvf archive.tar -C ~/Documents/test .
./
./image.png
./index.html
./hello.txt
./output.txt
programicio@Programicio:~$

Após a opção -C, indicamos o caminho dos arquivos dentro do arquivo tar. O ponto . indica que o conteúdo da pasta test será adicionado ao arquivo sem caminhos completos. Ao descompactar, todos os arquivos serão extraídos na pasta atual:

programicio@Programicio:~$ tar -xvf archive.tar
./
./image.png
./index.html
./hello.txt
./output.txt

Outro exemplo é arquivar todo o conteúdo da pasta ~/Documents/test no diretório test:

programicio@Programicio:~$ tar -cvf archive.tar -C ~/Documents test
test/
test/image.png
test/index.html
test/hello.txt
test/output.txt

Ao descompactar, todos os arquivos serão extraídos para a pasta test no diretório atual:

programicio@Programicio:~$ tar -xvf archive.tar
test/
test/image.png
test/index.html
test/hello.txt
test/output.txt

Podemos também ajustar o caminho onde o arquivo será extraído usando a opção -C:

programicio@Programicio:~$ mkdir test_new
programicio@Programicio:~$ tar -xvf archive.tar -C test_new
./
./image.png
./index.html
./hello.txt
./output.txt

Neste caso, primeiro criamos a pasta test_new e depois extraímos o arquivo para ela.

Backup Incremental

A opção -g permite criar um backup incremental. Por exemplo, vamos fazer backup da pasta test:

mkdir backup
tar -czvg backup/snapshot-file -f backup/backup-initial.tar.gz test

Neste caso, os backups são colocados na pasta backup, que criamos previamente. O segundo comando criará o arquivo snapshot-file, que contém uma lista de todos os arquivos incluídos no backup. O arquivo backup-initial.tar.gz será o backup inicial.

Após a criação do backup inicial, podemos fazer alterações na pasta test, como modificar arquivos existentes ou adicionar novos. Para criar o próximo backup incremental, usamos o mesmo comando com o arquivo de snapshot existente:

Após a criação do backup inicial, podemos fazer alterações na pasta test, como modificar arquivos existentes ou adicionar novos, ou até criar mais um, o próximo backup incremental:

tar -czvg backup/snapshot-file -f backup/backup-11032024.tar.gz test

Se por algum motivo a pasta test for excluída acidentalmente e precisarmos restaurá-la, devemos descompactar os backups sequencialmente, começando pelos mais antigos:

tar -xzvf backup/backup-initial.tar.gz
tar -xzvf backup/backup-11032024.tar.gz

Assim, conseguimos restaurar todos os arquivos, incluindo as alterações feitas entre os backups.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com