Comando rsync do Linux: opções e exemplos de uso

Se você copia a pasta inteira toda vez para manter dois servidores iguais, a transferência tem o tamanho total mesmo quando só um arquivo mudou. O comando rsync é a abreviação de remote sync. Ele compara origem e destino e envia só os arquivos diferentes, funcionando do mesmo jeito entre pastas locais e entre servidores conectados por SSH. Este post traz o uso básico, as opções e exemplos dos dois métodos de conexão: SSH e o daemon do rsync.
A saída deste post vem do rsync 3.2.7 no AlmaLinux 9.8. Se o rsync não estiver instalado, instale-o pelo gerenciador de pacotes.
# família RHEL
dnf -y install rsync
# família Debian
apt -y install rsync✅ Uso básico
A sintaxe básica é a seguinte.
rsync -opções origem destinoComo no comando cp, escreva primeiro a origem e depois o destino. Uma barra [/] no fim da origem põe só o conteúdo da pasta no destino; sem ela, vai a pasta inteira.
~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.pngRode o mesmo comando de novo e a lista de arquivos fica vazia, com o sent caindo para algumas centenas de bytes. Arquivos com mesmo tamanho e hora de modificação são pulados.
~]# rsync -av www/ backup/
sending incremental file list
sent 166 bytes received 13 bytes 358.00 bytes/sec
total size is 3,015 speedup is 16.84Só com -r e sem -a, as horas de modificação não são preservadas, e a próxima execução envia os mesmos arquivos de novo. Ao sincronizar pastas, use -a como padrão.
A opção -n mostra só quais arquivos mudariam, sem transferir nada, e a saída termina com [(DRY RUN)]. Opções que apagam arquivos no destino, como --delete, devem ser conferidas antes com -n e só depois executadas de verdade.
~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html
sent 188 bytes received 39 bytes 454.00 bytes/sec
total size is 3,013 speedup is 13.27 (DRY RUN)✅ Opções do comando rsync & simulador
| Opção | Descrição | |
|---|---|---|
| -a | --archiveCopia também subdiretórios e preserva permissões, dono, hora de modificação e links simbólicos (o mesmo que -rlptgoD) | |
| -v | --verboseMostra o nome de cada arquivo transferido e os totais | |
| -z | --compressComprime os dados dos arquivos durante a transferência | |
| -r | --recursiveCopia também subdiretórios (incluso em -a) | |
| -t | --timesPreserva as horas de modificação (incluso em -a). É o que decide quais arquivos são pulados na próxima execução | |
| -n | --dry-runMostra só os arquivos que mudariam, sem transferir, e marca o fim com (DRY RUN) | |
| -u | --updatePula arquivos mais novos no destino | |
| -h | --human-readableMostra os bytes em K, M e G | |
| -P | O mesmo que --partial --progress. Mostra o progresso por arquivo e retoma transferências interrompidas | |
| -i | --itemize-changesMostra o que mudou em cada arquivo como código>f+++++++++ arquivo novo · >f.st...... tamanho e hora alterados · *deleting apagado | |
| -e | --rsh=COMMANDDefine o shell remoto-e 'ssh -p 2222 -i /root/.ssh/key.pem' | |
| --delete | Apaga do destino arquivos que não existem mais na origem (precisa de -r ou -a) | |
| --exclude=PATTERN | Exclui arquivos e diretórios que correspondem ao padrão--exclude '*.tmp' --exclude 'cache/' | |
| --include=PATTERN | Colocado antes de --exclude, deixa só esse padrão fora da exclusão | |
| --max-size=SIZE | Não transfere arquivos maiores que o tamanho indicado (--min-size para os menores)--max-size=3M --min-size=10k | |
| --bwlimit=RATE | Limita a velocidade de transferência, em KiB/s | |
| --stats | Mostra a contagem de arquivos e as estatísticas de transferência |
✅ Métodos de conexão: SSH e o daemon do rsync
Há duas formas de conectar a um servidor remoto. Um dois-pontos [:] depois do host passa pelo SSH; dois-pontos duplos [::] conectam direto ao daemon do rsync na porta 873.
| Tipo | Método SSH (:) | Método do daemon do rsync (::) |
|---|---|---|
| Sintaxe | rsync -opções user@host:/caminho /caminho/local | rsync -opções host::módulo/caminho /caminho/local |
| Porta | Porta SSH (padrão 22) | 873 |
| Criptografia | Criptografado pelo SSH | Sem criptografia |
| Autenticação | Chave SSH ou senha | hosts allow no rsyncd.conf; conta e senha opcionais |
| Configuração no servidor | Nenhuma (funciona assim que o acesso SSH funcionar) | Instalar rsync-daemon, /etc/rsyncd.conf, abrir a porta 873 |
| Uso | Backup e implantação entre servidores (a escolha padrão) | Espelhamento em rede interna sem distribuir contas SSH |
🔲 Método SSH
Se você alcança o servidor por SSH, funciona sem nenhuma configuração no servidor. Quando a porta é outra ou você usa um arquivo de chave, coloque o comando ssh como está na opção -e.
# local → remoto
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# remoto → local
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# porta SSH e arquivo de chave
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
Para deixar de fora certos arquivos ou diretórios, adicione --exclude uma vez por padrão, ou agrupe os padrões entre chaves e escreva uma vez só.
rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
🔲 Método do daemon do rsync
O daemon do rsync dá acesso por módulo na porta 873 sem conta SSH. O tráfego não é criptografado, então é usado entre servidores da mesma rede interna.
No AlmaLinux 9, instale o pacote rsync-daemon e inicie o serviço. Em servidores com firewalld, abra a porta 873; em servidores na nuvem, abra-a no firewall do console. O método xinetd usado no RHEL 8 e anteriores não existe mais no 9.
dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reloadNo arquivo de configuração [/etc/rsyncd.conf], defina o nome do módulo, o caminho e os hosts permitidos. Com read only em yes, clientes remotos só conseguem baixar dele.
[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30Do lado remoto, só dois-pontos duplos depois do host listam os módulos; com o nome do módulo, aparecem os arquivos dentro dele.
~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x 4,096 2025/06/12 22:14:39 .
drwxr-xr-x 4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x 4,096 2025/06/12 22:14:39 2server_dataA cópia usa a forma [host::módulo/caminho]. --delete apaga do destino os arquivos que não estão na origem, e --include deixa fora da exclusão só os itens colocados antes de --exclude.
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/
sent 58 bytes received 332 bytes 780.00 bytes/sec
total size is 442 speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/

Num servidor com SELinux ativo, o acesso ao caminho do módulo pode ser bloqueado com [Permission denied (13)]. No teste, passou depois de desligar o SELinux com [setenforce 0].
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes received 90 bytes 65.33 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see anterior errors) (code 23) at main.c(1658) [Receiver=3.1.2]--bwlimit limita a velocidade de transferência em KiB/s, e com -P você vê junto o progresso de cada arquivo. --max-size e --min-size transferem só arquivos dentro da faixa de tamanho indicada.
rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.