Vou mostrar, com alguns exemplos práticos, como o uso do rsync pode ajudar a manter o conteúdo de 2 diretórios (pastas) separados sincronizado – mesmo que estejam em computadores diferentes.
O comando rsync faz transferências de arquivos entre máquinas, de maneira simplificada e automática e… você nem precisa ter privilégios administrativos para isto.
Alguns dos recursos do Rsync
- é eficiente para copiar e sincronizar arquivos entre computadores remotos
- comparado com outros programas, é mais rápido do que o scp – o rsync usa um protocolo que lhe permite atualizar apenas os arquivos que sofreram mudanças
- consome menos banda, uma vez que só trabalha em cima das atualizações necessárias e usa compressão para transferir dados
Instalação do rsync
Até onde sei, o comando vem instalado por padrão nas várias distro Linux.
Usuários Windows podem fazer o download do rsync aqui.
Usuários do Redhat ou do SuSE, podem instalar o rsync com o seguinte comando:
sudo yum install rsync
Usuários Debian e Ubuntu, podem usar o apt-get:
sudo apt-get install rsync
Sintaxe do comando rsync
Basicamente, você vai rodar o rsync com algumas opções, indicar a origem e o destino da sincronização:
rsync options #origem #destino
Daqui pra frente veremos outros exemplos práticos com o comando rsync.
Como sincronizar dois diretórios locais com o rsync
Vamos usar estes dois como exemplo:
/home/Documentos
, como origem e/home/backup/Documentos
, como destino.
Vou mostrar como copiar a sincronizar recursivamente os diretórios:
rsync -vhr /home/Documentos /home/backup
o comando vai criar, se não houver, uma pasta chamada /home/backup/Documentos
e copiar para dentro dela todo o conteúdo da outra pasta. Ao final do processo deverá retornar um relatório semelhante a este:
sent 707.32M bytes received 2.35K bytes 2.92M bytes/sec total size is 827.60M speedup is 1.17
Ao repetir o comando, o rsync irá comparar os arquivos em busca de diferenças, por que ele só irá atualizar os arquivos que foram modificados.
OPÇÕES COMUNS DO RSYNC
- -v — ativa a verbosidade do comando, pra você poder acompanhar o que está acontecendo durante sua execução;
- -r — ativa a recursividade, ou seja, copia subdiretórios também;
- -h — human readable exibe as informações da execução do comando em um formato mais legível, convertendo valores de bytes para mega ou gigabytes onde for necessário para reduzir os tamanhos dos números e tornar o texto mais fácil de ler;
- -z — comprime os dados, antes de transferir;
- -a — liga o modo archive que permite a cópia recursiva de arquivos, preservando links simbólicos, permissões de arquivos e timestamps.
Como copiar e sincronizar um arquivo local via rsync
Neste exemplo, vamos sincronizar um único arquivo, em um computador local, entre dois diretórios diferentes:
rsync -zvh Docs/mysql_storage.html /backup/Docs/mysql_storage.html
obtendo como resultado:
mysql_storage.html sent 1.68K bytes received 31 bytes 3.43K bytes/sec total size is 3.38K speedup is 1.97
Como sincronizar um diretório local com um remoto via SSH
Chegamos a um dos pontos fortes do rsync.
No exemplo que segue, vou copiar os arquivos do diretório /home
, no servidor remoto remoto.com.br
para um diretório local /backup
. O nome de usuário, no exemplo, é justincase
:
rsync -avz -e ssh justincase@remoto.com.br:/home /backup
Faça o teste com os seus próprios valores e veja se funciona.
3 replies on “Copie arquivos com o rsync”
Gostaria de ter um exemplo do rsync que mostrasse como criar uma cópia de um diretório, mas que não fosse copiados os arquivos ocultos. Seria com a opção –exclude ‘.*’ ? Seria algo assim:
rsync -rvza –exclude ‘.*’ /home/Documentos /home/backup
Gostaria de saber se tem como faze-lo em daemon, ou seja ele fique rodando direto e quando houvesse alterações nos arquivos ele copiasse.
Ou se eu fizer um script onde ele coloca já a senha do ssh e colocar esse script no contab(debian) para executar a cada 5 minutos e ele só vai copiar os que foram alerados?
Espero que o artigo Crontab para iniciantes possa te ajudar.