Como Usar o Comando Rsync no Linux: 16 Exemplos Práticos

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.

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.

Rsync Local Files

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
Rsync Local Directory

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
Rsync Directory Remote System

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
Rsync Remote Directory to Local

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
Rsync Copy Remote File to Local

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
Rsync Copy Local File to Remote

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
Rsync Progress While Copying Files

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
Rsync Include and Exclude Files

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.

Rsync Delete Option

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
Rsync Set Max File Transfer Size

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
Rsync Delete Source File After Transfer

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)
Rsync 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/