Sincronizando diretorios de forma incremental com o comando RSYNC

De gutocarvalho.net

Já começou a copiar um diretório com MP3 de um HD para outro ou para um pendrive em algum ambiente gráfico, seja KDE, seja Gnome, seja XFCE ou outros, e quando menos esperava aconteceu algo inesperado e cópia parou, pior ainda se você mandou mover, ai ferrou, geralmente você só tem a opção “sobrescrever”, não tem uma opção “resumir” ou “retomar”, bom o console pode te salvar ;)

O comando RSYNC é utilizado para sincronizar conteúdos em origem e destino e tem diversas opções bacanas.

Conteúdo

[editar] sincronizando diretórios

Vou dar aqui uma explicação de uma aplicação do RSYNC.

usuario@computador:~$ rsync -av --update --delete /diretorio/origem /diretorio/destino/

Esse comando vai copiar o conteúdo do diretório “origem” para o “diretório” destino.

-a significa archive (arquivamento) equivale as opções -rlptgoD
-v significa verbose, ele vai te mostrar informações da sincronização
--update atualiza arquivos mais novos que existam no /origem em /destino
--delete apaga arquivos que não existam mais em /origem no /destino

para maiores informações:

usuario@computador:~$ rsync --help
usuario@computador:~$ man rsync

ou visite os site do rsync e leia da documentação.

[editar] fazendo um teste

vamos entrar no diretório tmp

usuario@computador:~$ cd /tmp

vamos criar o diretório1, vai funcionar como origem

usuario@computador:/tmp$ mkdir diretorio1

vamos criar o diretório2, vai funcionar como destino

usuario@computador:/tmp$ mkdir diretorio2

acesse o diretorio1

usuario@computador:/tmp$ cd diretorio 1

crie 4 arquivos

usuario@computador:/tmp/diretorio1$ touch a1 a2 a3 a4

vamos listar o conteúdo do diretório

usuarios@computador:/tmp/diretorio1$ ls -la
total 8
drwxr-xr-x  2 root root 4096 2008-04-07 09:20 .
drwxrwxrwt 28 root root 4096 2008-04-07 09:16 ..
-rw-r--r--  1 root root    0 2008-04-07 09:16 a1
-rw-r--r--  1 root root    0 2008-04-07 09:20 a2
-rw-r--r--  1 root root    0 2008-04-07 09:20 a3
-rw-r--r--  1 root root    0 2008-04-07 09:17 a4

saindo do diretório

usuario@computador:/tmp/diretorio1$ cd ..

sincronizando os diretórios

usuario@computador:/tmp$ rsync -av --update --delete diretorio1/ diretorio2/
building file list ... done
./
a1
a2
a3
a4
 
sent 292 bytes  received 120 bytes  824.00 bytes/sec
total size is 0  speedup is 0.00

listando conteúdo do diretório2, a sincronização funcionou, veja que os arquivos estão lá...

usuario@computador:/tmp$  ls -l diretorio2/
total 0
-rw-r--r-- 1 root root 0 2008-04-07 09:16 a1
-rw-r--r-- 1 root root 0 2008-04-07 09:20 a2
-rw-r--r-- 1 root root 0 2008-04-07 09:20 a3
-rw-r--r-- 1 root root 0 2008-04-07 09:17 a4

agora vamos deletar um arquivo e ver se ele matem no destino ou não (--delete)

usuario@computador:/tmp$ rm diretorio1/a4

e vamos criar um novo arquivo chamado a5

usuario@computador:/tmp$ touch diretorio1/a5

além disto, vamos modificar um arquivo para saber se ele atualizada (--update)

usuario@computador:/tmp$ echo "arquivo modificado" > a1

agora vamos sincronizar novamente

usuario@computador:/tmp$ rsync -av --update --delete diretorio1/ diretorio2/
building file list ... done
deleting a4
./
a1
a5

sent 144 bytes  received 48 bytes  384.00 bytes/sec
total size is 0  speedup is 0.00

certinho, atualizou o arquivo1, copiou o arquivo e deletou o arquivo a4 que não existe mais na origem, entendeu ?! ;)

[editar] rsync via ssh

sincronizando com origem local e destino via ssh.

rsync  -avz  /diretorio/origem/   usuario@ip-destino:/diretorio/destino/

ou o contrário

rsync  -avz  usuario@ip-destino:/diretorio/origem/ /diretorio/destino

a porta é diferente da 22, sem problemas... vamos a 2 métodos possíveis...

rsync -avz –rsh=’ssh -p 2222′ /diretorio/de/origem usuario@host:/diretorio/de/destino/

ou

rsync -avz -e ’ssh -p 2222′ /diretorio/de/origem usuario@host:/diretorio/de/destino/

[editar] referências

Ferramentas pessoais