tar - Linux
O comando tar
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:
: cria um arquivo-c, --create
: exclui o conteúdo do arquivo--delete
: compara arquivos-d, --diff, --compare
: adiciona arquivos ao final do arquivo-r, --append
: exibe o conteúdo do arquivo-t, --list
: extrai arquivos do arquivo-x, --extract, --get
: usa ARCHIVE como nome do arquivo-f, --file=ARCHIVE
: exibe uma lista detalhada dos arquivos processados-v, --verbose
: sobrescreve arquivos ao extrair--overwrite
: sobrescreve diretórios ao extrair--overwrite-dir
--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
-v
-f
É 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:
: utiliza a ferramenta-z
para compressãogzip
: utiliza a ferramenta-j
para compressãobzip2
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
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
test
tar -cvf test.tar test
Depois, comprimimos este arquivo usando a ferramenta bzip2
9
-c
bzip2 -9 -c
Finalmente, redirecionamos o resultado da ferramenta bzip2
test.tar.bz2
Gerenciamento de nomes
Ao criar um arquivo tar
Documents
test
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
/home/programicio/Documents/test
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/
test
Se quisermos descompactar o arquivo na pasta test
Mudar para o diretório que contém os arquivos a serem arquivados e executar o comando
a partir desse diretório, evitando assim a adição dos caminhos completos aos arquivos.tar
Usar a opção
ao criar o arquivo, o que permite incluir apenas os nomes relativos dos arquivos e diretórios no arquivo.-C
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
tar
.
test
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
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
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
Backup Incremental
A opção -g
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
snapshot-file
backup-initial.tar.gz
Após a criação do backup inicial, podemos fazer alterações na pasta test
Após a criação do backup inicial, podemos fazer alterações na pasta test
tar -czvg backup/snapshot-file -f backup/backup-11032024.tar.gz test
Se por algum motivo a pasta test
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.