Você está na página 1de 17

tar - dicas, scripts e exemplos de linha de comando.

Atualizado em: 20/12/2007

 Sobre este documento


 tar na interface gráfica - Konqueror - gerenciador de arquivos do KDE
 tar + gzip - Resumo de linhas de comando
 pesquisar dentro do tar.gz, selecionar arquivo
 Restaurar instalação, voltar arquivos
 Incluir data de criação no nome de arquivo.tar.gz
 backup por usuário - tar por diretório de usuário
 tar + data + find - seleção por data de arquivo
 tar + ssh - salvar em maquina remota
 tar com seleção/exclusão de arquivos e/ou diretórios
o tar de diretórios /home
 Multi volume, dividir arquivo
 Outros exemplos de linha de comando [NOVO!]
 log do tar
 indicações

Sobre este documento


Original em formato texto com marcações para txt2tags, conversão em HTML e atualização do
site via script.

Linhas de comando e scripts utilizando tar.

tar na interface gráfica - Konqueror - gerenciador


de arquivos do KDE
Em linha de comando e scripts tem mais versatilidade, mais rápido, funciona em qualquer
ambiente e outras vantagens, também pode ser mais difícil para quem não tem habilidades em
trabalhar na linha de comando.

Tem que prefere o modo texto e tem quem prefere o ambiente gráfico, mesmo que precisa de
vários cliques e demora um pouco mais do que uma simples linha de comando, navegar em
ambiente gráfico é muito fácil e intuitivo, também pode criar scripts e executar a partir de atalho
no desktop ou agendar.
Criar arquivo .tar.gz via konqueror

Clique com botão auxiliar sobre o arquivo ou diretório que deseja empacotar, as opções mudam
conforme a instalação, procure em "ações", "empacotar" ou termos semelhantes.

Descompactar arquivo .tar.gz via konqueror.

Mesmo que tenha utilizado script ou linha de comando na criação do .tar.gz, pode descompactar
via konqueror, basta um clique com botão auxiliar sobre o arquivo, selecione -> "ações" ->
"extrair para..." vai abrir o utilitário Ark, continue navegando nas opções e escolha onde deseja
salvar e Ok,

Consultar e navegar dentro do arquivo compactado.

Konqueror -> Duplo clique no arquivo .tar.gz, nesta mesma janela do konqueror será criado um
diretório com o mesmo nome do original de onde criou o .tar.gz, por exemplo, se utilizou um
ponto de montagem em /mnt/alguma-coisa na criação do .tar.gz, nesta janela do konqueror vai
aparecer um diretório mnt, vá navegando dentro dos diretórios até encontrar o arquivo que deseja,
quando achar o arquivo desejado, pode arrastar para outro diretório, abrir e etc...

Exemplo, navegar no arquivo cl10-hda3.tar.gz que é um backup de uma instalação onde foi
utilizado o ponto de montagem /mnt/hd2, quando navegar neste arquivo, na URL do konqueror
aparece algo assim: tar:/root/cl10-hda3.tar.gz/mnt/hd2/etc isto é feito em arquivos temporários,
existem somente nas janelas do konqueror enquanto em uso, não fica disponível para acesso via
linha de comando, mesmo que indique um ponto de montagem ele não será afetado.

Via Gnome também pode usar o Konqueror ou o File Roller

tar + gzip - Resumo de linhas de comando


Formato para criar novo arquivo (empacotar e compactar)

tar -zcvf arqdestino.tar.gz arqorigem


|||| | |_arquivo, diretório ou multiplas opções.
|||| |_arquivo destino, arquivão com todos arquivos e/ou diretórios.
||||
||||_salvar no arquivo indicado, quando omitido procura pela unidade de fita DAT.
|||__Verbose - exibir mensagens no console
||___criar novo arquivo de armazenamento
|____chama gzip - compactar com gzip

Formato para extrair arquivos, desempacotar e descompactar

tar -zxvf arquivo.tar.gz -C /tmp


|||| | | |_caminho destino para salvar arquivos extraidos.
|||| | |_criar diretório destino, quando omitido salva a partir do
diretório corrente.
|||| |_arquivo empacotado pelo tar, arquivão contendo arquivos e/ou
diretórios.
||||
||||_extrair do arquivo indicado, quando omitido procura pela unidade de fita
DAT.
|||__Verbose - exibir mensagens no console
||___extrair arquivos
|____chama gzip - descompactar com gzip

Alguns exemplos de linha de comando.

Empacotar arquivos do diretório corrente, sem compactar e sem mensagens no console (sem
paramentos zv).

tar cf todostxt.tar *.txt

Neste formato não exibe mensagens, pega somente os .txt do diretório corrente, não pega sub-
diretórios

Empacotar diretórios se seus sub-diretórios, exemplo para tudo que estiver abaixo de /home/zago
e sem compactar use:
tar cvf arquivo.tar /home/zago

Empacotar e compactar
tar cvfz arquivo.tar.gz /home/zago

No exemplo acima foi informado o caminho completo a partir do raiz, (/home/zago), quando
desempacotar vai salvar o caminho completo e criar os sub-diretórios a partir do diretório que
executar o comando, ou no mesmo local de origem quando indicou o caminho completo no
empacotamente e para extrair indique a partir do raiz( -C / ).

Desempacotar tar xvf arquivo.tar`

Descompactar e desempacotar, omitindo o destino cria sub-diretorio a partir do diretório local;

tar xvfz arquivo.tgz

tar xvfz arquivo.tar.gz

com -C / salva a paritr do raiz.


tar -zxvf arquivo.tar.gz -C /

com -C /caminho salva a partir do diretório indicado, exemplo para /tmp


tar -zxvf arquivo.tar.gz -C /tmp
Para não salvar o caminho completo, execute a linha de comando de criação do arquivão tar em
diretório acima do que deseja empacotar, exemplos para empacotar os diretórios /home/zago e
/home/zago/guiaz, sem incluir o caminho completo.

cd /home/
tar -zcvf homezago.tar.gz zago

cd /home/zago/
tar -zcvf zagoguiaz.tar.gz guiaz

Neste exemplo acima não guarda o caminho completo de origem, na extração dos arquivos cria
somente o sub-dirtório a partir do diretório local ou abaixo do caminho indicado (-C /caminho).

Incluir data de criação no nome do arquivo

cd /home/zago
tar -zcvf guiaz-`date +%d%m%y`.tar.gz /home/zago/guiaz

Com exclusão de dois sub-diretórios (apostilas e drivers)


cd /home/zago
tar -zcvf Linux-BR-FAQ-`date +%d.%b.%Y`.tar.gz --exclude /home/zago/guiaz/apostilas --
exclude /home/zago/guiaz/drivers guiaz

Usando multi-volume, do man do tar

-L, --tape-length N
muda a fita após gravar N*1024 bytes

-M, --multi-volume
cria/lista/extrai arquivos multivolumes

pesquisar dentro do tar.gz, selecionar arquivo


tar -tzf arquivo.tar.gz "t" para ver o conteúdo.

tar -tzf dirzago.tar.gz

Quando a lista for grande desvie o resultado da pesquisa para um arquivo texto:
tar -tzf dirzago.tar.gz >> /home/zago/teste

depois visualize o resultado editando /home/zago/teste com seu editor preferido.

ou com pausa em cada página:


tar -tzf dirzago.tar.gz | more
Porcurar arquivo especifico, exemplo de procura por comandos.txt dentro de um .tar.gz

tar -tvzf nome-do-arq.tar.gz | grep nome-que-procuro

tar -tvzf homezago-30nov2005.tar.gz | grep comandos.txt

[zago@servsamba zago]$ tar -tvzf homezago-30nov2005.tar.gz | grep comandos.txt


-rwxrwxrwx zago/zago 60965 2005-08-31 19:09:13 home/zago/guiaz/comandos.txt

Extrair somente um arquivo do .tar.gz, precisa informar o caminho e nome do arquivo, quando
não souber, use a opção acima para descobrir, exemplo para retirar de dentro do .tar.gz somente o
arquivo acima (comandos.txt), execute;

tar -zxvf homezago-30nov2005.tar.gz home/zago/guiaz/comandos.txt

[zago@servsamba zago]$ tar -zxvf homezago-30nov2005.tar.gz


home/zago/guiaz/comandos.txt
home/zago/guiaz/comandos.txt

[zago@servsamba zago]$ ls -la home/zago/guiaz/comandos.txt


-rwxrwxr-x 1 zago zago 60965 2005-08-31 19:09 home/zago/guiaz/comandos.txt

tar -xzf arquivo.tar.gz "x" para extrair os arquivos.

Restaurar instalação, voltar arquivos


Indicar outro diretório, restaurar em local diferente da copia.

use -C, --directory DIR mudar para o diretório DIR ex.:

tar xf /home/backup/arq.tar -C /home/zago/doc/arq.doc

tar zxvf /home/zago/arquivo.tar.gz -C /tmp

Restaurar a partir da raiz "/", dentro do diretório onde está a copia, execute:
tar -zxvf arquivo.tar.gz -C /

Este comando é útil para recuperar instalação completa de HD, descompacta o arquivo.tar.gz e
salva no mesmo ponto de montagem utilizado na criação do mesmo, portanto requer a indicação
do caminho completo na criação do .tar.gz e na restauração precisa montar a partição no mesmo
ponto de montagem que utilizou para criar o .tar.gz, caso não tenha o ponto de montagem ou
permissão para gravação, retornará erro ou criará diretórios a partir do raiz, portando não salva na
partição correta.

Para descobrir qual o caminho (ponto de montagem) utilizado na criação do arquivo de backup
.tar.gz, execute;
tar -ztvf arquivo.tar.gz | head -5

Este comando não salva nada em disco, somente exibe as 5 primeiras linhas no console, exemplo;

drwxr--r-- root/root 0 1969-12-31 21:00:00 mnt/win/


drwxr--r-- root/root 0 2005-08-21 03:13:20 mnt/win/win98/

como pode ver, neste exemplo o ponto de montagem é /mnt/win

Incluir data de criação no nome de arquivo.tar.gz


Incluir a data atual no nome do arquivo tar, alguns exemplos de comando e resultados.

Nestes exemplos cria um tar do diretório /home/zago/guiaz, cria arquivo tar com nome Linux-BR-
FAQ-mais-data-de-criacao.tar.gz, veja os comandos com o resultado

tar -zcvf Linux-BR-FAQ-`date +%d.%b.%Y`.tar.gz /home/zago/guiaz


Linux-BR-FAQ-08.Ago.2004.tar.gz

tar -zcvf Linux-BR-FAQ-`date +%d%m%y`.tar.gz /home/zago/guiaz


Linux-BR-FAQ-080804.tar.gz

Incluir também a hora e minutos, não utilize ":" como separador porque é um simbolo não válido
em nome de arquivos, exemplos:

tar -zcvf Linux-BR-FAQ-`date +%d.%b.%Y-%H-%M`.tar.gz /home/zago/guiaz


Linux-BR-FAQ-08.Ago.2004-17-14.tar.gz

Consulte o manual, man date

Tem outras opções de datas e formatos, tais como; incluir a hora no formato de 12 horas, com ou
sem o zero a esquerda e muito mais, incluir o nome do dia da semana, veja o formato desejado e
substitua nos exemplos acima.

Muito útil para nomear arquivos em backup, evita que o novo arquivo sobrepõe o já existente,
facilita a organização e identificação dos arquivos.

Este formato de nomear arquivos podem ser utilizados por qualquer outro utilitário ou comando.

Observe que "date" e as variáveis estão dentro crase ` ` , para obter uma crase, pressione a tecla da
crase e depois a barra de espaço, ou prefira copiar e colar e de outro local.

backup por usuário - tar por diretório de usuário


Como root para ter acesso ao diretório dos outros users
Lembre de fazer uma cópia completa do home do usuário antes de removê-lo.

No nosso exemplo teremos um diretório /home/copias onde será gravado o arquivo de cópia com
o nome do usuário mais a data de criação.por exemplo backup do usuário zago que está em
/home/zago executamos a linha:

tar -zcvf /home/copias/zago-`date +%d%m%y`.tar.gz /home/zago

no final da execução tenho em /home/copias um arquivo zagodatadehoje.tar.gz com tudo que tem
em /home/zago.

Exemplo com exclusão de arquivos desta cópia, crie o arquivo com a lista de exclusão, como
exemplo /etc/copianao, formato de linha de comando para excluir esta listagem do backup.

tar -zcvf /home/copias/zago-`date +%d%m%y`.tar.gz /home/zago --exclude-


from=/var/copianao

Mais detalhes sobre seleção no tar, veja neste documento o tópico "tar com seleção/exclusão"

tar + find para seleção de arquivos por usuário

tar -cvf arquivo.tar `find . -user zago -print`

Compactando:

tar -cvzf arquivo.tar.gz `find . -user zago -print`

Esta combinação é útil mas prefiro usar o caminho completo em scripts.

tar + data + find - seleção por data de arquivo


Incluir a data de criação no nome do arquivo, nomeie o arquivo neste formato;

tar -zcvf /home/copias/arquivo-`date +%d%m%y`.tar.gz /home/zago

o sinal que aparece em arquivo-`date +%d%m%y`.tar.gz é crase ou backquote (`), cuidado para
não confundir com apas simples ou quote (').

Tem um espaço entre "date +", com y minúsculo o ano tem dois dígitos com Y maiúsculo tem os
quatro dígitos.

Pesquisar com find em /tmp/guiaz para criar guiaz.tar.gz contendo todos arquivos .txt.
find /tmp/guiaz -name "*.txt" | xargs tar -zcvf guiaz.tar.gz

Alguns exemplos de uso combinando find por data com tar, fique atendo ao caminho, tanto para
salvar como de procura, nestes exemplos o caminho destino do .tar.gz é omitido, portanto salva
no diretório corrente, os demais caminhos para find e tar são informados, neste caso indicado
arquivos ou diretórios de procura, sempre faça testes em ambiente de testes, crie diretórios de
testes...

Empacotar somente os .dbf alterados nas ultimas 24 horas.

find /home/sistema/bcodados/*.dbf -mtime 0 | tar zcvf dadosdbf-`date +%Y%m%d`.tar.gz -


T -

Empacontar todos .dbf com exclusão de um arquivo, coloque ele etre aspas, exemplo de
exclusão de locmod.dbf, faz backup de todos .dbf do caminho indicado, com excessão do
arquivo locmod.dbf, quando indica os arquivos não desce nos sub-diretórios, no exemplo
abaixo pega somente arquivos dentro de bcodados

tar -zcvf /backup/dadosdbf-`date +%Y%m%d`.tar.gz /home/sistema/bcodados/*.dbf --


exclude="locmod.dbf"

O mesmo exemplo acima com uso do find para selecionar somente os .dbf modificados nas
ultimas 24 horas, excluindo do backup o arquivo locmod.dbf, ele não entra no backup
mesmo que alterado nas ultimas 24 horas.

find /home/sistema/bcodados/*.dbf -mtime 0 | tar zcvf dadosdbf-`date +%Y%m%d`.tar.gz -


T - --exclude="/home/sistema/bcodados/locmod.dbf"

Backup do diretório bcodados e seus sub-diretórios, com exclusão de arquivos *.cdx,


*.ntx e locmod.dbf, neste exemplo pega também sub-diretórios de bcodados/

tar -zcvf /backup/dadosdbf-`date +%Y%m%d`.tar.gz /home/sistema/bcodados/ --


exclude=*.cdx --exclude=*.ntx --exclude="locmod.dbf"

Exemplo de script para criar arquivo no formato aquivo+ano+mes+dia do sistema (`date


+%Y%m%d`), nomear arquivos neste formato dadosdbf-20070613.tar.gz
No final envia por scp para outra maquina e apaga o arquivo na maquina local, exemplo
em modo interativo, precisa digitar a senha. Tem outros meios de automatizar esta
transferencia, troque o uso de scp por ssh sem senha, mount, ftp, e-mail ou outro modo

find /home/samba/bcodados/*.dbf | tar zcvf dadosdbf-`date +%Y%m%d`.tar.gz -T - --


exclude="/home/samba/bcodados/locmod.dbf" scp dadosdbf-`date +%Y%m%d`.tar.gz
zago@192.168.1.2:~/ rm -rf sdbf-`date +%Y%m%d`.tar.gz

Cuidado com a virada do dia, script que inicia antes e termina depois da meia noite,
nestes casos crie a variável no inicio do script contendo a data, trabalhe com ela do
inicio ao fim para evitar erros no nome do arquivo

Exemplo para criar variável com nome de arquivo mais data.


MARQUIVO=`date +'guiaz-%d-%b-%Y.tar.gz'` tar -zcvf $MARQUIVO /home/zago/guiaz

ls guiaz-08-Ago-2004.tar.gz

Outros exemplos

find /home/zago/guiaz -mtime -1 -type f -print | tar zcvf meusarq.tar.gz -T -

tar -zcvf meusarq.tar.gz `find . -user zago -print`

tar -zcvf meusarq.tar.gz `find /home/zago/docs -user zago -print`

Script com exemplo de exclusão de arquivos.


Script Shell de Backup Incremental
http://www.dicas-l.com.br/cantinhodoshell/print/cantinhodoshell_20070130.html

tar + ssh - salvar em maquina remota


Exemplos de uso do comando tar com ssh, compactar arquivo local e salvar em outra maquina,
em uma linha de comando ou script, prático para salvar copia remota ou quando não tem espaço
livre na maquina local.

tar -zcvf hzrede.tar.gz /home/zago/rede | scp hzrede.tar.gz zago@192.168.1.53:~/

Incluindo a data no nome do arquivo;


tar -zcvf hzrede-`date +%d%m%y`.tar.gz /home/zago/rede | scp hzrede-`date
+%d%m%y`.tar.gz zago@192.168.1.53:~/

Use o mesmo nome de arquivo em tar e scp.

Outros formatos de data consulte o tópico tar+data

Dicas, tutoriais e FAQ sobre ssh;


http://www.zago.eti.br/ssh/ssh.html

tar com seleção/exclusão de arquivos e/ou diretórios


Excluir um sub-diretório, exemplo para compactar o diretorio /home/zago menos o subdiretorio
/home/zago/tmp

tar zcvf zagosemtmp.tar.gz --exclude /home/zago/tmp /home/zago

Exemplo de uma rotina de backup de uma lista de diretórios menos alguns alguns arquivos ou
tipo de arquivo.
Criar arquivo tar dos diretórios listados em um arquivo, exceto os arquivos listados em outro
arquivo, são dois arquivos, um com a lista do diretórios do backup, outro com a lista dos arquivos
excluidos, arquivos que estão dentro dos diretórios de backup que não serão copiados.

Crie um arquivo copiasim contendo os diretórios que QUER COPIAR, exemplo de um copiasim

/home/zago/guiaz/
/home/zago/evolution/
/home/zago/genealogia/
/home/zago/doc/
/etc/

Crie um arquivo copianao contendo a lista de arquivos ou terminações que NÃO QUER
COPIAR, exemplo de um copianao

*.txt~
*.html~
*.tmp
*.$*
*.~*
*.bak
*.swp
SWAP
swap
~*.*
core*.*

Salve em um diretório qualquer, neste exemplo utilizei /var, na linha de comando do tar precisa
indicar o caminho e nome do arquivo.

Exemplo de linha de comando utilizando os exemplos acima:


tar -zcvf /home/copias/dirzago-`date +%d%m%y`.tar.gz -T /var/copiasim --exclude-
from=/var/copianao

ou se preferir:

tar -zcvf /home/copias/dirzago-`date +%d%m%y`.tar.gz \


-T /var/copiasim \
--exclude-from=/var/copianao

explicando:

tar -zcvf /home/copias/dirzago-`date +%d%m%y`.tar.gz

Salva o arquivo em /home/copias com o nome dirzago-datadecriação.tar.gz

-T /var/copiasim
Arquivo de inclusão, contendo a lista de diretórios e arquivos do backup.

--exclude-from=/var/copianao

Arquivo de exclusão, contendo a lista de arquivos ou diretórios excluidos do backup, são arquivos
e diretórios que estão dentro dos diretórios listados em copiasim mas não serão copiados, como
exemplo na listagem, estão os temporários.

Resultado final, arquivo dirzago-datadecriação.tar.gz em /home/copias, contendo os diretórios


listados em copiasim menos o que está listado no arquivo copianao.

Pode incluir varias linhas de comando em script, em lugar de criar um arquivão de tudo, pode
dividir em linhas de comando para criar tar por usuários, grupos e etc...,

Parte de um script utilizando montagem NFS da maquina com IP 192.168.1.200, diversos


exemplos de uso do tar.

#!/bin/bash
mount -tnfs 192.168.1.200:/home/copia /mnt/copia
tar -zcvf /mnt/copia/alunos-`date +%d%m%y`.tar.gz -T /var/alunos --exclude-
from=/var/copianao
tar -zcvf /mnt/copia/zago-`date +%d%m%y`.tar.gz /home/zago/* --exclude-
from=/var/copianao
tar -zcvf /mnt/copia/turmas-`date +%d%m%y`.tar.gz /home/turm* --exclude-
from=/var/copianao
# CORTADO ALGUMAS LINHAS PARA DIMINUIR O TAMANHO DESTE TEXTO.
# as linhas abaixo não funcionam
# tar -zcvf /mnt/copia/doc-`date +%d%m%y`.tar.gz -T `find /home/ -name \*.d*` --
exclude-from=/var/copianao
# erro: bash: /bin/tar: Lista de argumentos muito longa
# tar -zcvf /mnt/copia/Doc-`date +%d%m%y`.tar.gz -T `find /home/ -name \*.D*` --
exclude-from=/var/copianao
# erro: bash: /bin/tar: Lista de argumentos muito longa
# tar -zcvf /mnt/copia/Doc-`date +%d%m%y`.tar.gz -T `find /home/alunos -name *.D*` -
-exclude-from=/var/copianao
#tar -zcvf /mnt/copia/Doc-`date +%d%m%y`.tar.gz -T `find /home/alunos -name *.D*`
# esta pegando os arquivos .DLL e dat
# tar -zcvf /mnt/copia/Doc-`date +%d%m%y`.tar.gz -T `find /home/alunos -name \*.DOC`
# tar -zcvf /mnt/copia/Doc-`date +%d%m%y`.tar.gz /home/*.D* --exclude-
from=/var/copianao
# erro tar: /home/*.D*: Cannot stat: Arquivo ou diretório não encontrado
umount /mnt/copia

Explicando:

Máquina na rede com IP 192.168.1.200 exportando por NFS o diretório /home/copia, outra
maquina desta rede executa o script acima, a primeira linha monta este diretório.

A segunda linha compacta o que tem listado em /var/alunos, exceto o listado /var/copianao, salva
no arquivo com nome de alunos-datadecriação.tar.gz
Na terceira linha faz backup do diretório /home/zago menos o listado em /var/copianao

Na quarta linha faz backup de todos os diretórios que iniciam com turm, tenho um diretório para
cada turmaxxx e nesta linha faço um backup de todas.

A partir da quinta linha não está funcionando, preciso testar com find, fazer backup somente de
arquivos .doc, .xls, .bmp e .txt .gdb e .dbf que estão no /home , conforme relação no arquivo
/var/doc, as duas maneiras não funcionou, qualquer dia faço novos testes.

por ultimo a desmontagem do que foi montado na primeira linha; umount /mnt/copia

tar de diretórios /home


Script para fazer backup de todos os diretórios /home conforme listagem e por último criar um tar
de todo o /home exceto os diretórios listados em arquivo.

A linha de comando abaixo cria um arquivo com todos os diretório de /home, use seu editor
preferido para ajustar ou excluir eventuais sub-diretórios, a primeira linha funciona no SUSE 10.1
e a segunda no CL10, o resultado pode ser diferente em sua instalação, deve ter um diretório por
linha neste formato.

/home/contabil
/home/netlogon
/home/vendas
/home/zago

ls -ld /home/* | awk '{print $9}' > /tmp/dirhome.txt

ls -ld /home/* | awk '{print $8}' > /tmp/dirhome.txt

Exemplo de script para modificar e adaptar conforme sua instalação.

cat tarhome

#!/bin/bash
while read LINHA ; do
# seus comandos aqui, exemplo para testar e remover as barras
# echo $LINHA
MDIR=`echo $LINHA | sed "s|/||g"`
MVAR2=`echo $MDIR`-`date +%d.%b.%Y`
tar czvf $MVAR2.tar.gz $LINHA
done < /tmp/dirhome.txt
tar -zcvf /home/outros-`date +%d%m%y`.tar.gz /home --exclude-from=/tmp/dirhome.txt
tar -zcvf dirtemp-`date +%d%m%y`.tar.gz /tmp

No diretório onde executou ou indicar para salvar os arquivos, deverá criar arquivos neste
formato.
homevendas-12.Jul.2006.tar.gz
homezago-12.Jul.2006.tar.gz

Multi volume, dividir arquivo


Gravar CD ou DVD tem suas limitações de tamanho, arquivos grandes que excedem a capacidade
da mídia, precisa dividir em pedaços conforme a capacidade da mídia, tem diversas soluções para
resolver este problema.

Na minha opinião o melhor é montar script de forma a criar os .tar.gz dentro do limite da mídia,
compactar por tipo de arquivo, diretório, usuário ou outra forma que facilite na restauração,
procure neste documento as opções com listagem em arquivo, exclusão de arquivos e diretórios e
etc... Procure fazer de forma que na recuperação de um arquivo não force o uso de um grande
conjunto de CD/DVD, um arquivão dividido em vários CD/DVD corre risco maior, danificando
um CD pode comprometer todos, estude a melhor forma de backup, como restaurar e identificar
arquivos de maneira mais rápida e segura. O que parece fácil agora pode se tornar um problemão
depois.

Multi-volume do tar, no (man tar) tem esta informação.

-M, --multi-volume
cria/lista/extrai arquivos multivolumes

Não consegui compactar com multi-volume, usar -z e -M na mesma linha de comando, depois de
dezenas de tentativas desisti desta opção, tem as alternativas de compactar e dividir com split,
compactar para depois dividir com -M, não achei produtivo fazer em duas etapas, embora seja
uma solução segura e prática quando automatizada via scripts. Resolvi o problema do cliente com
troca do gravador de CD por um gravador de DVD.

Para eventual uso futuro, pretendo testar com DVDR/W para gravar em DVD da mesma forma
que grava em disquete (floppy), nem sei se isto é possível. Coloquei aqui esta copia parcial do
script, removi as partes de testes e alterei o nome da empresa por uma ISO de DVD do SUSE,
criar tar em partes de 700MB para gravar em CD, o exemplo a seguir fica mais fácil e pratico
trabalhar com split, aqui tem a finalidade de mostrar o uso de multi-volume com tar, ajuste a seu
modo e se preferir inclua as opções de passar por parametros; tamanho, nome das partes e
diretório de backup.

du /home/zago/SUSE-Linux-10.1-GM-DVD-i386.iso

3665416 SUSE-Linux-10.1-GM-DVD-i386.iso

Pegar tamanho total de arquivo ou diretório

MTOTAL=$(du /home/zago/SUSE-Linux-10.1-GM-DVD-i386.iso | awk '{print $1}')


echo $MTOTAL

3665416

Definir tamanho das partes

MPARTE=700000

descobrir quantos volumes deve criar.

MQTDEARQ=`echo "$MTOTAL/$MPARTE" | bc`

MQTDEARQ=`expr $MQTDEARQ + 1`

Montar variável nomeando as partes do arquivo.

for i in $(seq 1 $MQTDEARQ)


do
MVAR=$MVAR$(printf " -f parte-0$i")
done

Tem que nomear as partes e indicar -f de file para cada uma, exemplo de como deve ficar o
comando tar para dividir em 6 partes, a quantidade de partes depende do resultado do tamanho
total pelo de cada parte, some mais uma parte porque o "bc" retorna inteiro, portanto precisa de
mais uma parte para eventual resto da divisão, não tem problema criar este arquivo a mais, se não
for necessário ele será ignorado.

Pode fazer via script ou montar a linha de comando na não, o script que vem logo a seguir serve
para monta esta linha de comando.

tar -c -M -L 700000 -f parte-01.tar -f part-02.tar -f part-03.tar -f part-04.tar -f


part-05.tar -f part-06.tar /home/zago/SUSE-Linux-10.1-GM-DVD-i386.iso

Montando o script para criar a linha de comando de arquivos multi-volumes.

cat multivol.sh

#!/bin/bash
MTOTAL=$(du /home/zago/SUSE-Linux-10.1-GM-DVD-i386.iso | awk '{print $1}')
MPARTE=700000
MQTDEARQ=`echo "$MTOTAL/$MPARTE" | bc`
MQTDEARQ=`expr $MQTDEARQ + 1`
for i in $(seq 1 $MQTDEARQ)
do
MPARTES=$MPARTES$(printf " -f parte-0$i.tar")
done
tar -c -M -L $MPARTE $MPARTES /home/zago/SUSE-Linux-10.1-GM-DVD-i386.iso
Este script acima cria no diretório corrente os arquivos com tamanho e nomes especificados nas
variáveis iniciais, parte-01.tar, part-02.tar ...., pode fazer via script ou montar a linha de comando
na mão.

Gravar estas partes em CD/DVD, precisa criar a ISO e queimar a mídia.

Restaurar a partir de arquivos multi-volumes, não tentei recuperar direto do CD, o melhor é copiar
todos os CD para um diretório local e executar outro script, pode pegar o numero total de arquivos
no diretório como referencia do total de partes no script abaixo para criar os nomes das partes,
depois de concluindo o tar ignora o restante.

cat mtarrestore.sh

#!/bin/bash
MQTDEARQ=`ls | wc -l`
for i in $(seq 1 $MQTDEARQ)
do
MPARTES=$MPARTES$(printf " -f parte-0$i.tar")
done
echo $MPARTES
tar -x -M $MPARTES

Onde $MPARTES contém as partes do tar, -f parte-01.tar -f parte-02.tar ...., pode fazer via script
ou montar a linha de comando na mão, aliás, o script serve para montar a linha de comando com a
variável contendo todos os nomes das partes precedidadas de -f.

Split

Split divide o arquivo conforme tamanho solicitado, crie o tar normalmente, crie o arquivão .tar e
depois aplique o split para dividir o arquivo em pedaços do tamanho desejado que pode ser a
capacidade de um disquete, CD ou DVD, estes pedaços pode criar ISO e gravar CD DVD, para
recuperar precisa juntar os pedaços com cat para depois aplicar o tar no desempacotamento, acho
esta forma mais trabalhosa mas é uma solução segura também.

Veja tutorial e FAQ especifico sobre Split


http://www.zago.eti.br/split.tt

Outros exemplos de linha de comando


tar -c /dir_ou_arq_origiem |gzip > /arq_destino/arq-`date +%d%m%y`.tar.gz

Criar um arquivo compactado do diretorio /home/zago e gravar em /mnt/copia com o nome zago-
datadecriação.tar.gz.

tar -c /home/zago |gzip > /mnt/copia/zago-`date +%d%m%y`.tar.gz


o sinal que aparece em arq-`date +%d%m%y`.tar.gz é crase ou backquote (`) cuidado para não
confundir com aspas simples ou quote (').

Tem um espaço entre "date +", com y minúsculo o ano tem dois dígitos com Y maiúsculo tem os
quatro dígitos.

log do tar
tar não registra eventos em arquivo de log, pode redirecionar a saido do console para arquivo.

-v, --verbose
mostra a lista dos arquivos processados

Em scripts não precisa do (v), caso queira salvar as mensagens em arquivo, acrescente no final da
linha de comando do tar ">> logtar.txt", sem as aspas, assim fica gravado no arquivo logtar.txt,
redireciona as mensagens do console para este arquivo, depois é só analisar com um editor de
texto, formato da linha de comando ou em script

tar zcvf ssh`date +%d%m%y`.tar.gz /home/zago/guiaz/ssh >> logtar.txt


tar zcvf ssh`date +%d%m%y`.tar.gz /home/zago/guiaz/ssh >> /tmp/logtar.txt

Execute o script com a opção -xv para exibir as linhas de comando, (bash -xv
script.sh). Use linhas com echo para salvar ou exibir conteúdo de variáveis,
comentários e mensagens em arquivo. Ttem mais dicas para depurar erros em script
neste tutorial.
http://www.zago.eti.br/script/log-de-comandos.html

indicações
FAQ com mensagens da lista Linux-br
http://www.zago.eti.br/tar.txt
tar+ssh, uso para backup via rede, salvar em outra maquina da rede, dicas e
exemplos em;
http://www.zago.eti.br/ssh/ssh.html
FAQ, dicas e indicação de tutorias sobre uso dos pacotes zip e suas variações, gzip,
bzip, unzip, xzip, gnozip e etc....
http://www.zago.eti.br/zip.txt
FAQ sobre backup em geral.
http://www.zago.eti.br/backup.txt
Fita DAT, uso do tar em fita DAT, FAQ especifico em:
http://www.zago.eti.br/fitadat.txt
Manual do tar (inglês)
http://www.gnu.org/software/tar/manual/tar.html
Página principal deste site (FAQ)
http://www.zago.eti.br/menu.html