Conheça vários exemplos de uso do Rsync, esta ferramenta poderosa para sincronizar diretórios locais e remotos!
| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. Mais detalhes clicando aqui.
1. Introdução
O Rsync, abreviação de “sincronização remota”, é uma ferramenta de sincronização que pode ser utilizada para diretórios ou arquivos tanto remotos quanto locais. Ele usa um algoritmo que minimiza a quantidade de dados copiados ao mover apenas as porções de arquivos que foram alteradas, e é por essa razão que ele também é muito usado em scripts de backups.
2. Sintaxe
A sintaxe do rsync é simples e opera de uma maneira semelhante a outros comandos como ssh, scp e mv.
Vamos criar dois diretórios de teste e alguns arquivos de teste com os seguintes comandos:
cd ~
mkdir dir1
mkdir dir2
touch dir1/file{1..100}
Agora, temos um diretório chamado dir1 contendo 100 arquivos vazios.
ls dir1
Para sincronizar o conteúdo de dir1 em dir2 no mesmo sistema, digite:
$ rsync -r dir1/ dir2
A opção -r significa recursivo, que é necessário para a sincronização de diretórios.
Também podemos usar o sinalizador -a como alternativa ao -r:
$ rsync -a dir1/ dir2
A opção -a é a combinação de vários parâmetros em um. Ela representa “arquivo” e sincroniza recursivamente, preserva links simbólicos, arquivos especiais e de dispositivo, horários de modificação, grupo, proprietário e permissões. Ela é o mais popular ao lado do -v de –verbose, que é nada mais que a exibição de tudo que está sendo copiado naquele momento.
Importante
Você deve ter notado que existe uma barra à direita / no final do primeiro argumento nos comandos acima:
$ rsync -a dir1/ dir2
Isso é necessário e significa “o conteúdo em dir1”. Se o comando for realizado sem a barra à direita, o diretório dir1 é o que seria copiado, para dentro do dir2. Isso criaria uma hierarquia como esta:
$ ~/dir2/dir1/[files]
Sempre verifique duas vezes seus argumentos antes de executar um comando rsync.
O Rsync fornece um método para fazer isso passando a opção -n ou –dry-run com o já citado -v para –verbose:
$ rsync -anv dir1/ dir2
3. Usando Remotamente
Sincronizar com um sistema remoto é simples se você possuir acesso SSH à máquina remota e o rsync instalado em ambas. Depois de ter o acesso SSH verificado entre as duas máquinas, sincronize a pasta dir1 de antes, com um computador remoto usando esta sintaxe – note que vou transferir o diretório real neste caso, então omitimos a barra à direita:
$ rsync -va ~/dir1 usuario@IP_do_alvo:diretório_alvo
Isso é chamado de uma operação “push”, pois empurra um diretório do sistema local para um sistema remoto. A operação oposta é “pull”. Ela é usada para sincronizar um diretório remoto com o sistema local. Se o dir1 estivesse no sistema remoto em vez de no nosso sistema local, a sintaxe seria mais ou menos o contrário:
$ rsync -va usuario@rdiretório_alvo:/home/$USER/dir1 pasta/na/máquina/local
Assim como em ferramentas similares, a origem é sempre no primeiro argumento e o destino é sempre o segundo.
4. Opções úteis
O Rsync oferece muitas opções para alterar o comportamento padrão da ferramenta. Se estiver transferindo arquivos que ainda não foram comprimidos, como arquivos de texto, você pode reduzir a transferência de rede adicionando compressão com a opção -z:
$ rsync -avz origem destino
O sinalizador -P é muito útil: Ele combina os sinalizadores –progress e –partial. O primeiro deles lhe dá uma barra de progresso para as transferências, e o segundo, te permite retomar as transferências interrompidas:
$ rsync -vazP origem destino
Se executarmos o comando novamente, teremos um resultado mais curto e nada será copiado, pois nenhuma alteração foi feita. Isso ilustra a capacidade do rsync de usar horários de modificação para determinar se alterações já foram feitas.
4.1 Delete
Para manter dois diretórios realmente sincronizados, é necessário excluir arquivos do diretório de destino caso eles sejam removidos da fonte. Por padrão, o rsync não exclui nada do diretório de destino, ele apenas copia os dados complementando o que já existir.
Podemos alterar esse comportamento com a opção –delete.
Antes de usar essa opção, use a opção –dry-run e faça testes para evitar a perda de dados
$ rsync -va --delete origem destino
Se quiser excluir certos arquivos ou diretórios localizados dentro de um diretório que você está sincronizando, faça isso os especificando em uma lista separada por vírgulas após a opção –exclude=:
$ rsync -va --exclude=padrão_a_ser_excluido origem destino
Se especificarmos um padrão para excluir, podemos sobrescrever essa exclusão para arquivos que correspondam a um padrão diferente usando a opção –include=.
$ rsync -va --exclude=padrão_a_ser_excluido --include=padrão_a_ser_incluído origem destino
Por fim, a opção —backup do rsync pode ser usada para armazenar backups de arquivos importantes. Ela é usada em conjunto com a opção –backup-dir, que especifica o diretório onde os arquivos de backup devem ser armazenados.
$ rsync -va --delete --backup --backup-dir=/caminho/do/backup /caminho/da/origem destino
5. Conclusão
O Rsync pode simplificar as transferências de arquivos em conexões de rede e melhorar sua interação de sincronização de diretórios locais. A flexibilidade do rsync faz com que ele seja uma boa opção para muitas operações de nível de arquivos diferentes.
Inclusive, dominá-lo permite que você crie scripts .sh que automatizem backups usando o Cron!
Mas isso é assunto para outra publicação!
#UrbanCompassPony
Adaptado de: DigitalOcean
Autodidata, me aprofundei em sistemas operacionais baseados em UNIX®, principalmente Linux. Também procuro trazer assuntos correlacionados direta ou indiretamente, como automação, robótica e embarcados.