O Rsync, que significa “sincronização remota”, é uma ferramenta de sincronização remota e local. Ele usa um algoritmo que minimiza a quantidade de dados copiados ao mover apenas as porções de arquivos que foram alteradas.
Neste guia, iremos abordar o uso básico deste utilitário poderoso.
O Rsync é uma ferramenta de sincronização habilitada em rede muito. Devido à sua onipresença em sistemas Linux e do tipo Unix, além da sua popularidade como uma ferramenta para scripts de sistema, ela é incluída na maioria das distribuições Linux por padrão.
A sintaxe básica do rsync
é bastante simples e opera de uma maneira semelhante ao ssh, scp e cp.
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
Outputfile1 file18 file27 file36 file45 file54 file63 file72 file81 file90
file10 file19 file28 file37 file46 file55 file64 file73 file82 file91
file100 file2 file29 file38 file47 file56 file65 file74 file83 file92
file11 file20 file3 file39 file48 file57 file66 file75 file84 file93
file12 file21 file30 file4 file49 file58 file67 file76 file85 file94
file13 file22 file31 file40 file5 file59 file68 file77 file86 file95
file14 file23 file32 file41 file50 file6 file69 file78 file87 file96
file15 file24 file33 file42 file51 file60 file7 file79 file88 file97
file16 file25 file34 file43 file52 file61 file70 file8 file89 file98
file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Também temos um diretório vazio chamado dir2
.
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 poderíamos usar o sinalizador -a
como alternativa:
- rsync -a dir1/ dir2
A opção -a
é um sinalizador de combinação. Ela representa “arquivo” e sincroniza recursivamente e preserva links simbólicos, arquivos especiais e de dispositivo, horários de modificação, grupo, proprietário e permissões. Ela é mais comumente usada do que -r
e geralmente é o que você vai desejar usar.
Você pode 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 de dir1
”. A alternativa, sem a barra à direita, colocaria o dir1
, incluindo o diretório, 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 as opções -n
ou --dry-run
. O sinalizador -v
(para verboso, prolixo) também é necessário para obter o resultado apropriado:
- rsync -anv dir1/ dir2
Outputsending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
Compare esse resultado com o resultado que obtemos ao remover a barra à direita:
- rsync -anv dir1 dir2
Outputsending 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
. . .
Você pode ver aqui que o diretório em si foi transferido.
Sincronizar com um sistema remoto é trivial se você possuir acesso SSH à máquina remota e o rsync
instalado em ambos os lados. 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 (observe que queremos transferir o diretório real neste caso, então omitimos a barra à direita):
- rsync -a ~/dir1 username@remote_host:destination_directory
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:
- rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Assim como cp
e ferramentas similares, a fonte é sempre o primeiro argumento, e o destino é sempre o segundo.
O Rsync oferece muitas opções para alterar o comportamento padrão do utilitário. Já discutimos alguns dos sinalizadores mais necessários.
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 -az source destination
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 lhe permite retomar as transferências interrompidas:
- rsync -azP source destination
Outputsending 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)
. . .
Se executarmos o comando novamente, teremos um resultado mais curto, pois nenhuma alteração foi feita. Isso ilustra a capacidade do rsync de usar horários de modificação para determinar se alterações foram feitas.
- rsync -azP source destination
Outputsending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
Podemos atualizar o horário de modificação em alguns arquivos e ver que o rsync copia novamente de maneira inteligente apenas os arquivos alterados:
- touch dir1/file{1..10}
- rsync -azP source destination
Outputsending 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)
file2
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)
file3
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101)
. . .
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.
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 impedir a perda de dados:
- rsync -a --delete source destination
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 -a --exclude=pattern_to_exclude source destination
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 -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
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 -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
O Rsync pode simplificar as transferências de arquivos em conexões de rede e adicionar robustez à 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.
O domínio do rsync permite projetar operações de backup complexas e ganhar controle refinado sobre o que é transferido e a forma como isso é feito.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!