rsync é uma fer­ra­menta versátil, que facilita a trans­fe­rên­cia de arquivos por conexões de rede e acelera a sin­cro­ni­za­ção de di­re­tó­rios locais. Devido à alta fle­xi­bi­li­dade deste software, ele passou a ser uma excelente opção para uma vasta gama de operações en­vol­vendo arquivos.

O que é rsync?

rsync (abre­vi­a­ção de remote syn­ch­ro­ni­za­tion) é uma fer­ra­menta de sin­cro­ni­za­ção de software livre para Linux, de grande fle­xi­bi­li­dade e com­pa­tí­vel com di­fe­ren­tes redes. Com esse programa de código aberto, você se torna capaz de sin­cro­ni­zar arquivos e di­re­tó­rios entre sistemas locais ou por uma rede. Para que isso seja possível, a fer­ra­menta utiliza a técnica de trans­fe­rên­cia de dados di­fe­ren­cial, em que apenas os trechos realmente alterados dos arquivos são trans­fe­ri­dos. Isso minimiza a troca de dados e acelera muito o processo de sin­cro­ni­za­ção. Graças a sua grande variedade de opções, o rsync também pos­si­bi­lita o controle preciso do com­por­ta­mento das sin­cro­ni­za­ções. Além disso, a sintaxe da fer­ra­menta permite a re­a­li­za­ção tanto de cópias locais simples quanto de sin­cro­ni­za­ções complexas por uma rede.

Sintaxe do rsync

A sintaxe de comandos rsync é simples e se assemelha à sintaxe do SSH, do SCP e do CP. Comando rsync devem ter a seguinte estrutura básica:

rsync [OPTION] source destination
bash

source es­pe­ci­fica o caminho de origem a partir do qual os dados deverão ser sin­cro­ni­za­dos, enquanto destination indica o caminho de destino. Ainda, o rsync oferece diversas opções para a con­fi­gu­ra­ção de processos de sin­cro­ni­za­ção, de acordo com ne­ces­si­da­des in­di­vi­du­ais. Estas são algumas das opções mais populares:

  • -a (Archive): Preserva, re­cur­si­va­mente, per­mis­sões de arquivos, carimbos de data e hora, grupos, pro­pri­e­tá­rios e pro­pri­e­da­des especiais de arquivos.
  • -v (Verbose): Exibe in­for­ma­ções de­ta­lha­das sobre o processo de sin­cro­ni­za­ção.
  • -r (Recursive): Sin­cro­niza di­re­tó­rios e seus conteúdos de modo recursivo.
  • -u (Update): Transfere apenas os arquivos mais novos que os já exis­ten­tes no diretório de destino.
  • -z (Compress): Reduz o tráfego de dados da rede.
  • -n –itemize-changes: Exibe lista contendo as al­te­ra­ções a serem re­a­li­za­das.
  • --delete: Apaga, no diretório de destino, arquivos que não existem mais no diretório de origem.
  • --exclude: Exclui certos arquivos ou di­re­tó­rios da sin­cro­ni­za­ção.
  • --dry-run: Simula um processo de sin­cro­ni­za­ção, sem realmente trans­fe­rir arquivos.
  • --progress: Exibe o progresso da trans­fe­rên­cia de arquivos.
  • --partial: Arquivos par­ci­al­mente trans­fe­ri­dos per­ma­ne­cem no diretório de destino, caso a trans­fe­rên­cia seja in­ter­rom­pida. Durante uma nova trans­fe­rên­cia, a trans­fe­rên­cia in­ter­rom­pida é retomada a partir do último estado destes arquivos.

Exemplo de sintaxe rsync

Observe este exemplo prático. Ele lhe ajudará a com­pre­en­der a sintaxe do rsync. No comando a seguir, criamos o diretório dir1 e incluímos nele 100 arquivos de teste vazios. Também criamos um segundo diretório vazio, de nome dir2:

$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bash

Com a opção -r, o conteúdo de dir1 pode ser sin­cro­ni­zado com o dir2, desde que no mesmo sistema:

$ rsync -r dir1/ dir2
bash

Como al­ter­na­tiva, você pode usar a opção -a. Ela faz uma sin­cro­ni­za­ção recursiva e ainda inclui links sim­bó­li­cos, arquivos especiais de dis­po­si­ti­vos, datas/horas das al­te­ra­ções, grupos, pro­pri­e­tá­rios e per­mis­sões de arquivos:

$ rsync -a dir1/ dir2
bash

Atenção: A barra (/) ao final do diretório de origem, em um comando rsync, é im­por­tante. Ela indica que o conteúdo do diretório deve ser sin­cro­ni­zado, e não o diretório em si.

$ rsync -a dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bash

Se você não adicionar a barra após o diretório de origem, o próprio diretório de origem será copiado para o diretório de destino:

$ rsync -a dir1/ dir2
Output
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
bash

Portanto, na prática, é re­co­men­dá­vel usar a barra no fim do diretório de origem, para garantir que o processo de sin­cro­ni­za­ção corra como esperado e que o conteúdo do diretório de origem seja cor­re­ta­mente trans­fe­rido ao diretório de destino.

rsync para sin­cro­ni­za­ção com sistemas remotos

De modo geral, realizar sin­cro­ni­za­ções remotas com rsync não é com­pli­cado, desde que você tenha acesso SSH ao com­pu­ta­dor remoto e que possua as cre­den­ci­ais de au­ten­ti­ca­ção ne­ces­sá­rias. Além disso, a fer­ra­menta precisa estar instalada em ambos os lados para que a trans­fe­rên­cia seja possível. O rsync fre­quen­te­mente usa o protocolo SSH (Secure Shell) para es­ta­be­le­cer co­mu­ni­ca­ções seguras com sistemas remotos.

Após a ve­ri­fi­ca­ção do acesso SSH entre os dois com­pu­ta­do­res, a pasta dir1 poderá ser sin­cro­ni­zada para um com­pu­ta­dor remoto. Nesse caso, o diretório em si deverá ser trans­fe­rido. Por isso, a barra após o nome do diretório não será incluída no comando.

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Quando um diretório é trans­fe­rido de um sistema local para um sistema remoto, nos referimos ao processo como operação push. Em contraste, usamos o termo operação pull para nos re­fe­rir­mos a um diretório remoto sin­cro­ni­zado com um sistema local. Em ambas as situações, a sintaxe deve ter o seguinte formato:

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash
VPS Hosting (Virtual Private Servers)
World-class VPS at America’s lowest price

Hos­pe­da­gem VPS poderosa e de baixo custo para rodar suas apli­ca­ções sob medida, com as­sis­tente pessoal e suporte 24 horas.

  • Save 50% or more vs leading hosts
  • Unlimited traffic & no setup fees 
  • 99.99% uptime gua­ran­teed
  • Free 24/7 premium support 

Outras opções do rsync

Com as opções que apre­sen­ta­re­mos agora, você con­se­guirá per­so­na­li­zar ainda mais o com­por­ta­mento das trans­fe­rên­cias e sin­cro­ni­za­ções que realizará pelo rsync.

Trans­fe­rir arquivos não com­pac­ta­dos com rsync

Ao trans­fe­rir arquivos não com­pac­ta­dos, você poderá reduzir a carga da rede fazendo uso da opção -z:

$ rsync -az source destination
bash

Exibir progresso e retomar trans­fe­rên­cias in­ter­rom­pi­das com rsync

Com a indicação -P, você pode combinar as opções --progress e `–partial para obter um resumo do progresso das trans­fe­rên­cias e, ao mesmo tempo, retomar possíveis trans­fe­rên­cias in­ter­rom­pi­das:

$ rsync -azP source destination
Output
sending incremental file list
./
file1
    0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
    0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
    0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
    0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
. . .
bash

Execute o comando novamente para obter uma saída mais curta. Desse modo, você estará usando o rsync para descobrir se al­te­ra­ções foram feitas. Carimbos de data e hora apontarão essas al­te­ra­ções.

$ rsync -azP source destination
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Manter di­re­tó­rios sin­cro­ni­za­dos com rsync

Para garantir que dois di­re­tó­rios estejam sempre sin­cro­ni­za­dos, você deverá deletar, no diretório de destino, arquivos que foram removidos do diretório de origem — por padrão, o rsync não remove nenhum arquivo do diretório de destino. Modifique essa con­fi­gu­ra­ção com a opção --delete. Atenção: utilize essa opção com cuidado, pois ela apaga, no diretório de destino, todos os arquivos que não existem mais no diretório de origem.

Antes de empregar essa opção, acon­se­lha­mos que você faça uso da opção --dry-run, que realizará uma simulação do processo de sin­cro­ni­za­ção sem deletar os arquivos de fato. Assim, você garantirá que só serão feitas as al­te­ra­ções desejadas e que seus dados im­por­tan­tes não serão des­car­ta­dos por acidente.

$ rsync -a --delete source destination
bash

Excluir arquivos e di­re­tó­rios da sin­cro­ni­za­ção com rsync

No rsync, a opção --exclude pos­si­bi­lita excluir da sin­cro­ni­za­ção certos arquivos e di­re­tó­rios. Isso é útil, por exemplo, se você não deseja sin­cro­ni­zar arquivos tem­po­rá­rios, arquivos de log e conteúdos similares.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Além de es­pe­ci­fi­car um padrão para a exclusão dos arquivos, você ainda poderá incluir arquivos que cor­res­pon­dam a outro padrão, com a opção --include=:

$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bash

Fazer backups com rsync

Com a opção --backup, você poderá fazer backups dos seus arquivos im­por­tan­tes. Ela costuma ser utilizada em com­bi­na­ção com --backup-dir, que indica o diretório onde os arquivos de backup deverão ser salvos:

$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bash

No nosso artigo sobre backups em ser­vi­do­res com rsync, você encontra in­for­ma­ções mais apro­fun­da­das a respeito de cenários de backup.

Ir para o menu principal