O tar é muito útil para fazer backups e imagem de discos. Geralmente os administradores Unix conhecem a dupla:
tar -czf arquivo.tar.gz diretório/ # Para compactar o diretório no arquivo arquivo.tar.gz
tar -xvzf arquivo.tar.gz # Para descompactar o arquivo.tar.gz
Uma dica interessante do tar é que ele detecta sozinho qual o formato do pacote (p. ex., .tar.bz2 ou .tar.gz). Assim, ao invés de extrair com tar -xzf meupacote.tar.gz
basta usar tar -xf meupacote.tar.gz
. Obrigado ao Leonardo do leonardof.org pela dica.
Agora imagine que você precisa copiar o conteúdo de um hd para o outro. Neste caso seria preciso quase o dobro do espaço em disco criando um arquivo para depois descompactá-lo e nem sempre este espaço está disponível. Usando um pipe é possível criar o tar e extraí-lo ao mesmo tempo com um comando só e sem precisar criar o arquivo de destino do tar:
(cd /mnt/ ; tar -cf – sda1/) | (cd /mnt1 ; tar -xvf -) # ao mesmo tempo que o arquivo tar é criado, é também descompactado, economizando tempo e espaço em disco.
É possível também encapsular o tar dentro de um túnel ssh:
(cd /mnt/ ; tar -cf – sda1/ ) | (ssh destino ‘mkdir sda1 ; cd sda1 ; tar -xvf – ‘)
Se o link for limitado basta compactar e descompactar na origem e destino:
(cd /mnt/ ; tar -czf – sda1/ ) | (ssh destino ‘mkdir sda1 ; cd sda1 ; tar -xvfz – ‘) #Desde que não esteja transmitindo arquivos compactados, você economizará o link de rede, mas em compensação usará mais cpu na origem e destino.
Com estas dicas com certeza dá para fazer muitas coisas interessantes 😉
PS: Nunca tente criar um arquivo tar de arquivos abertos, coisas estranhas podem acontecer…