Rsync (Remote Sync) é o comando mais comumente utilizado para copiar e sincronizar arquivos e diretórios remotamente e também localmente em sistemas Linux/Unix.
Com a ajuda do comando rsync, você pode copiar e sincronizar seus dados remotamente e localmente entre diretórios, discos e redes, realizar backups de dados e espelhar entre duas máquinas Linux.
Este artigo explica 16 usos básicos e avançados do comando rsync para transferir seus arquivos remotamente e localmente em máquinas baseadas em Linux. Você não precisa ser um usuário root para executar o comando rsync.
Sumário
Vantagens do Comando Rsync
Oferece várias vantagens, incluindo:
- Transferência de Arquivos Eficiente – O rsync utiliza um algoritmo de transferência delta, o que significa que ele apenas transfere as diferenças entre os arquivos de origem e destino, reduzindo significativamente a quantidade de dados transferidos, tornando-o eficiente para sincronizar arquivos ou diretórios grandes.
- Sincronização de Arquivos Remotos – O rsync suporta tanto transferências de arquivos locais quanto remotos via SSH, o que permite a sincronização entre sistemas locais e remotos ou espelhamento de diretórios em várias máquinas.
- Backups Incrementais – O rsync é adequado para backups incrementais, pois cria e atualiza backups de forma eficiente, transferindo apenas arquivos novos ou modificados.
- Preservação de Permissões de Arquivo – o rsync pode preservar vários atributos de arquivo, como permissões, propriedade, carimbos de data/hora e links simbólicos, garantindo que os arquivos copiados mantenham suas características originais no destino.
- Controle de Largura de Banda – o rsync permite que você limite o uso da largura de banda durante as transferências de arquivos, pois utiliza métodos de compressão e descompressão ao enviar e receber dados em ambas as extremidades.
- Mais Rápido – o rsync pode ser mais rápido que o scp (Cópia Segura) para transferir arquivos, especialmente ao sincronizar diretórios grandes ou ao lidar com arquivos que já foram parcialmente transferidos ou existem no destino.
Sintaxe do Comando Rsync
O comando rsync segue a seguinte sintaxe:
# rsync [OPTIONS] SOURCE DESTINATION
Aqui está uma explicação dos diferentes componentes e opções usados com os comandos do rsync:
-v
– Saída detalhada, exibindo informações detalhadas sobre a transferência.-r
– copia dados de forma recursiva (mas não preserva carimbos de data/hora e permissões durante a transferência de dados).-a
– modo de arquivo, que permite copiar arquivos recursivamente e também preserva links simbólicos, permissões de arquivo, propriedade de usuário e grupo e timestamps.-z
– Compactar arquivos durante a transferência para reduzir o uso da rede.-h
– legível por humanos, saída de números em um formato legível por humanos.-P
– Mostra o progresso durante a transferência.FONTE
– Especifica o(s) arquivo(s) ou diretório(s) de origem a serem transferidos, que podem ser um local local ou remoto.DESTINO
– Especifica o caminho de destino onde os arquivos ou diretórios serão copiados. Semelhante à origem, pode ser um caminho local ou um local remoto.
Instalar Rsync no Sistema Linux
Podemos instalar o pacote rsync com a ajuda do seguinte gerenciador de pacotes conforme sua distribuição Linux.
$ sudo apt install rsync [On Debian, Ubuntu and Mint] $ sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] $ sudo emerge -a sys-apps/rsync [On Gentoo Linux] $ sudo apk add rsync [On Alpine Linux] $ sudo pacman -S rsync [On Arch Linux] $ sudo zypper install rsync [On OpenSUSE]
1. Copiar/Sincronizar Arquivo Localmente
Para copiar ou sincronizar um arquivo localmente, você pode usar o seguinte comando que sincronizará um único arquivo em uma máquina local de uma localização para outra localização.
Aqui neste exemplo, um arquivo chamado backup.tar precisa ser copiado ou sincronizado para a pasta /tmp/backups/.
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/ created directory /tmp/backups backup.tar.gz sent 224.54K bytes received 70 bytes 449.21K bytes/sec total size is 224.40K speedup is 1.00
No exemplo acima, você pode ver que se o destino ainda não existir, o rsync criará um diretório automaticamente para o destino.

2. Copiar/Sincronizar Diretório Localmente
O comando a seguir transferirá ou sincronizará todos os arquivos de um diretório para um diretório diferente na mesma máquina.
Aqui neste exemplo, /root/rpmpkgs contém alguns arquivos de pacote rpm e você deseja que esse diretório seja copiado dentro da pasta /tmp/backups/.
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.47M bytes received 96 bytes 2.32M bytes/sec total size is 3.74M speedup is 1.08

3. Copiar um Diretório de Local para Servidor Remoto
Para copiar um diretório de um servidor local para um servidor remoto, você pode usar o seguinte comando, que sincronizará um diretório de uma máquina local para uma máquina remota.
Por exemplo, se houver uma pasta em seu computador local “rpmpkgs” que contenha alguns pacotes RPM e se você deseja enviar o conteúdo desse diretório local para um servidor remoto, você pode usar o seguinte comando.
# rsync -avzh /root/rpmpkgs [email protected]:/root/ The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established. ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts. [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.74M bytes received 96 bytes 439.88K bytes/sec total size is 3.74M speedup is 1.00

4. Copiar um Diretório de Servidor Remoto para Local
Este comando ajudará a sincronizar um diretório remoto com um diretório local. Aqui neste exemplo, um diretório /root/rpmpkgs que está em um servidor remoto está sendo copiado para o seu computador local em /tmp/myrpms.
# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms [email protected]'s password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 104 bytes received 3.49M bytes 997.68K bytes/sec total size is 3.74M speedup is 1.07

5. Rsync Sobre SSH
Com o rsync, podemos usar SSH (Secure Shell) para transferência de dados, utilizando o protocolo SSH durante a transferência de nossos dados, você pode ter certeza de que seus dados estão sendo transferidos em uma conexão segura com criptografia, de modo que ninguém possa ler seus dados enquanto eles estão sendo transferidos pela internet.
Também, quando usamos o rsync, precisamos fornecer o usuário/root senha para realizar essa tarefa específica, então usar a opção SSH enviará seus logins de forma criptografada para que sua senha fique segura.
Para usar o rsync sobre SSH, você pode usar a opção -e
para especificar o comando do shell remoto, que é tipicamente ssh, como mostrado.
# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. Copiar um Arquivo de um Servidor Remoto para um Servidor Local com SSH
Para sincronizar um arquivo de um servidor remoto para um servidor local, você pode especificar um protocolo com o rsync usando a opção “-e” com o nome do protocolo que deseja usar.
Aqui neste exemplo, estaremos usando o “ssh” com a opção “-e” e realizar a transferência de dados.
# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp [email protected]'s password: receiving incremental file list anaconda-ks.cfg sent 43 bytes received 1.10K bytes 325.43 bytes/sec total size is 1.90K speedup is 1.67

7. Copiar um Arquivo de um Servidor Local para um Servidor Remoto com SSH
Para sincronizar um arquivo de um servidor local para um servidor remoto usando SSH, você pode aproveitar o seguinte comando conforme mostrado.
# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/ [email protected]'s password: sending incremental file list created directory /backups backup.tar.gz sent 224.59K bytes received 66 bytes 64.19K bytes/sec total size is 224.40K speedup is 1.00

8. Mostrar o Progresso ao Transferir Dados com Rsync
Para mostrar o progresso ao transferir os dados de uma máquina para outra, podemos usar a opção ‘--progress'
, que exibe os arquivos e o tempo restante para concluir a transferência.
# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5) rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5) rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm 2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5) rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm 120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5) sent 3.74M bytes received 96 bytes 1.50M bytes/sec total size is 3.74M speedup is 1.00

9. Incluir Arquivos com Extensão Particular com Rsync
Para incluir arquivos específicos ou padrões durante uma operação rsync, você pode usar a opção --include
com uma extensão que corresponda a todos os arquivos.
# rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
No exemplo fornecido, o rsync incluirá apenas arquivos com a extensão .txt
do diretório /caminho/para/fonte/ durante a transferência.
10. Excluir Arquivos com Extensão Particular com Rsync
Da mesma forma, para excluir uma extensão específica durante uma operação rsync, você pode usar a opção --exclude
com um padrão curinga.
# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
No exemplo fornecido, o rsync excluirá arquivos com a extensão especificada (*.ext)
durante a transferência, enquanto inclui todos os outros arquivos e diretórios.
11. Incluir e Excluir Arquivos com Rsync
Para incluir e excluir arquivos ou padrões específicos durante uma operação de rsync, você pode usar as opções --include
e --exclude
com padrões de curinga apropriados.
Essas duas opções nos permitem incluir e excluir arquivos especificando parâmetros, essas opções nos ajudam a especificar os arquivos ou diretórios que você deseja incluir na sua sincronização e excluir arquivos e pastas que você não deseja transferir.
Aqui neste exemplo, o comando rsync incluirá apenas os arquivos e diretórios que começam com ‘R’
e excluirá todos os outros arquivos e diretórios.
# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

12. Uso da Opção –delete com Rsync
Se um arquivo ou diretório não existe na origem, mas já existe no destino, você pode querer excluir esse arquivo/diretório existente no destino durante a sincronização.
Podemos usar a opção ‘--delete
‘ para excluir arquivos que não estão no diretório de origem.
A origem e o destino estão sincronizados. Agora crie um novo arquivo test.txt no destino.
[root@tecmint:~]# cd /root/rpm/ [root@tecmint:~/rpm]# touch test.txt [root@tecmint:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/ [email protected]'s password: receiving incremental file list deleting test.txt ./ .dbenv.lock .rpm.lock Basenames Conflictname Dirnames Enhancename Filetriggername Group Installtid Name Obsoletename Packages Providename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.001 __db.002 __db.003 sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec total size is 71,151,616 speedup is 3.84
O destino possui o novo arquivo chamado test.txt quando sincronizado com a origem com a opção ‘--delete
‘, ele removeu o arquivo test.txt.

13. Definir Limite de Transferência de Arquivo com Rsync
Você pode especificar o tamanho máximo do arquivo a ser transferido ou sincronizado. Você pode fazer isso com a opção “--max-size
”. Aqui, neste exemplo, o tamanho máximo do arquivo é 200k, então este comando transferirá apenas aqueles arquivos que forem iguais ou menores que 200k.
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm [email protected]'s password: sending incremental file list created directory /root/tmprpm ./ .dbenv.lock .rpm.lock Conflictname Enhancename Filetriggername Group Installtid Name Obsoletename Recommendname Requirename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.002 sent 129.52K bytes received 396 bytes 28.87K bytes/sec total size is 71.15M speedup is 547.66

14. Excluir Automaticamente Arquivos de Origem Após a Transferência
Agora, suponha que você tenha o servidor web principal e um servidor de backup de dados, você criou um backup diário e o sincronizou com seu servidor de backup, mas agora você não quer manter aquela cópia local do backup em seu servidor web.
Então, você vai esperar a transferência ser concluída e depois excluir aquele arquivo de backup local manualmente? Claro que NÃO. Essa exclusão automática pode ser feita usando a opção ‘--remove-source-files
‘.
# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 795 bytes received 2.33K bytes 894.29 bytes/sec total size is 267.30K speedup is 85.40 [root@tecmint:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory

15. Fazer uma Simulação com Rsync
Se você é um iniciante usando rsync e não sabe exatamente o que seu comando vai fazer. Rsync pode realmente bagunçar as coisas na sua pasta de destino e depois desfazer pode ser um trabalho tedioso.
O uso desta opção não fará nenhuma alteração nos arquivos e mostrará a saída do comando, se a saída mostrar exatamente o que você quer fazer, então você pode remover a opção ‘--dry-run
‘ do seu comando e executar no terminal.
# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 50 bytes received 19 bytes 19.71 bytes/sec total size is 267.30K speedup is 3,873.97 (DRY RUN)

16. Rsync Definir Limite de Banda e Transferir Arquivo
Você pode definir o limite de banda ao transferir dados de uma máquina para outra com a ajuda da opção ‘--bwlimit
‘. Esta opção nos ajuda a limitar a largura de banda de I/O.
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email protected]:/root/tmprpm/ [email protected]'s password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
Além disso, por padrão, o rsync sincroniza apenas blocos e bytes alterados. Se você deseja sincronizar explicitamente o arquivo inteiro, então use a opção ‘-W‘ com ele.
# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
Conclusão
Isso conclui nossa visão geral do rsync e suas capacidades. Para explorar ainda mais suas extensas opções e funcionalidades, eu encorajo você a consultar as abrangentes páginas do manual (man pages) disponíveis.
Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/