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/

