Há uma diferença enorme entre copiar ficheiros e sincronizá-los. Um cp -r copia tudo de novo, sempre; o rsync compara a origem com o destino e transfere apenas o que mudou. Está por trás de incontáveis backups e espelhos — e vale a pena conhecê-lo a fundo: um rsync bem escrito é rápido e fiável; um mal escrito apaga um backup inteiro em segundos.
Este artigo acompanha o guia em vídeo e segue a ordem em que vai usar as opções: a barra final, o modo arquivo, o ensaio a seco, o --delete e as suas redes de segurança, os filtros, o transporte por SSH e as opções que fazem do rsync um motor de backups incrementais. No fim, pode experimentar tudo num simulador interativo.
Veja o guia em vídeo
Prefere ver antes de experimentar? No canal HJFR-IT no YouTube mostramos o rsync opção a opção, com o resultado de cada comando no ecrã — narrado em português e com legendas.
O que faz o rsync
O rsync sincroniza ficheiros entre duas pastas da mesma máquina ou, por SSH, entre máquinas diferentes. Para decidir o que transferir, usa por omissão o quick check: se o tamanho e a data de modificação coincidem nos dois lados, salta o ficheiro. Nos que mudaram, o algoritmo delta envia só os blocos diferentes (em cópias locais envia o ficheiro inteiro, que é mais rápido).
rsync [OPÇÕES] ORIGEM DESTINO
rsync [OPÇÕES] ORIGEM utilizador@servidor:CAMINHO # enviar
rsync [OPÇÕES] utilizador@servidor:CAMINHO DESTINO # puxar
A barra final: a regra que toda a gente erra
Com uma barra no fim da origem, o rsync copia o conteúdo da pasta para dentro do destino; sem barra, copia a própria pasta, criando um nível a mais. É a causa número um de cópias no sítio errado.
rsync -av projeto/ backup/ # backup/index.html...
rsync -av projeto backup/ # backup/projeto/index.html...
Decore assim: barra no fim significa «o conteúdo de»; sem barra, «a pasta». No destino, a barra é indiferente. A regra vale também para caminhos remotos (utilizador@servidor:caminho), e o rsync funciona nos dois sentidos: empurra para o servidor ou puxa dele — por exemplo, para restaurar um backup.
Archive, verbose e progresso
-a(archive) — atalho para-rlptgoD: recursivo (-r) e a preservar ligações simbólicas, permissões, datas, dono e grupo. É o modo certo para cópias fiéis. Só com-r, as datas perdem-se e a execução seguinte volta a copiar tudo.-v(verbose) — lista os ficheiros à medida que passam e termina com as estatísticas; ospeedupmostra quanto se poupou por transferir só as diferenças.
Compressão, números legíveis e progresso
-z— comprime os dados em trânsito. Vale a pena com texto em ligações lentas; numa rede local rápida, ou com vídeo e imagens já comprimidos, só gasta CPU.-h— números legíveis:4.01Mem vez de4,009,798.--progress— bytes, percentagem, velocidade e tempo de cada ficheiro. Escreve-se muitas vezes-P, que lhe junta o--partial.
$ rsync -avh projeto/ backup/
...
total size is 373.47M speedup is 93.14
Ensaio a seco e itemize
Se só decorar uma opção, que seja esta: o -n (--dry-run) mostra exatamente o que seria copiado e apagado, mas não toca em nada, e a última linha termina em (DRY RUN). Corra primeiro com -avn, confirme a lista e só depois tire o n. Para mais detalhe, o -i (itemize) dá um código por ficheiro:
$ rsync -ain projeto/ backup/
>f+++++++++ build.tmp
.f...p..... deploy.sh
>f.st...... index.html
cd+++++++++ cache/
- 1.º carácter, a ação:
>recebido,<enviado para um servidor,ccriado localmente,.só atributos,*mensagem (*deleting). - 2.º, o tipo:
fficheiro,ddiretório,Lligação simbólica. - Os restantes, o que difere:
cchecksum,stamanho,tdata,ppermissões,odono,ggrupo. Uma fila de+é um ficheiro novo.
Apagar com –delete
Por omissão, o rsync só acrescenta e atualiza: o que se apaga na origem fica no destino, que acumula lixo. O --delete torna o destino um espelho exato da origem — e é a opção mais perigosa do rsync: com uma barra a mais ou uma origem vazia (um disco de rede que não montou, por exemplo), limpa um destino inteiro. Três precauções:
- Testar sempre primeiro com
-ne ler cada linhadeleting. --max-delete=N— ao atingir N apagamentos, o rsync deixa de apagar, avisa e sai com o código 25. Não desfaz os primeiros N, mas trava o desastre e faz falhar o script que o chamou.--delete-after— adia os apagamentos para o fim, para que um erro a meio não deixe o destino num estado inconsistente.
rsync -avn --delete projeto/ backup/
rsync -av --delete --delete-after --max-delete=50 projeto/ backup/
Filtros: –exclude e –include
O --exclude ignora o que corresponde a um padrão e pode repetir-se; um padrão terminado em / só se aplica a diretórios. O --include abre exceções, e a combinação clássica é incluir primeiro o que interessa e excluir tudo o resto com *:
rsync -av --exclude='*.tmp' --exclude='cache/' projeto/ backup/
rsync -av --include='*.pdf' --exclude='*' projeto/ pdfs/
A ordem importa: a primeira regra que coincide vence. Com --exclude='*' --include='*.pdf' não passa nada, porque o * apanha tudo primeiro. Para descer a subdiretórios, acrescente --include='*/' antes do * (e -m para não criar pastas vazias). O que está excluído fica também protegido do --delete.
--exclude-from=FICHEIRO— lê os padrões de um ficheiro, um por linha (#marca comentários): mais limpo do que dezenas de--excludee reutilizável.--filter(-f) — a forma geral das regras:- padrãoexclui,+ padrãoinclui,P padrãoprotege do--delete.
Transporte, retomar e verificar
Com destino remoto, o rsync usa SSH por omissão; o -e personaliza o transporte (porta, chave, opções):
rsync -avz -e "ssh -p 2222 -i ~/.ssh/bkp_ed25519" projeto/ aluno@198.51.100.20:/srv/bkp/
--partial— se a transferência cair, guarda o que já chegou e a execução seguinte retoma em vez de recomeçar. Com o-P(partial + progresso), é quase obrigatório em ficheiros grandes.-c(checksum) — o quick check engana-se se as datas forem manipuladas ou se um ficheiro se corromper sem mudar de tamanho. Com-c, o rsync compara um checksum de cada ficheiro dos dois lados: mais lento, mas infalível. Ideal para verificar um backup.
$ rsync -anic projeto/ backup/
>fc........ manual.pdf
Backups incrementais com –link-dest
A joia do rsync para backups é o --link-dest: aponta para a cópia anterior e, para os ficheiros que não mudaram, cria ligações físicas em vez de os copiar de novo. Cada pasta diária parece completa, mas os ficheiros inalterados partilham o mesmo espaço em disco. Um caminho relativo conta a partir do destino.
$ rsync -a --link-dest=../2026-10-23 projeto/ snap/2026-10-24/
$ du -sh snap/*
353M snap/2026-10-23
3.9M snap/2026-10-24
--backupcom--backup-dir=PASTA— guarda as versões antigas do que é substituído ou apagado numa pasta à parte (sem--backup-dir, ficam ao lado, com o sufixo~).-u(update) — salta os ficheiros mais recentes no destino, para não pisar alterações feitas do outro lado.
rsync -av --delete --backup --backup-dir=../versoes/2026-10-24 projeto/ backup/
rsync em cibersegurança
Um espelho não é um backup. Se um ransomware cifrar a origem, os ficheiros cifrados são, para o rsync, «alterados», e a sincronização seguinte substitui as cópias boas pelas cifradas; com --delete, também os apagamentos se propagam. Um backup resistente guarda versões — instantâneos diários com --link-dest ou pastas datadas com --backup-dir, mantidos durante semanas — e, idealmente, uma cópia fora de linha.
Destino só acessível por uma chave SSH restrita. Se a produção tem uma chave com acesso total ao servidor de backups, quem a comprometer apaga também os backups. Use uma chave dedicada, limitada no authorized_keys pelo script rrsync, distribuído com o rsync, que a confina a uma pasta e pode impedir a escrita ou os apagamentos. Melhor ainda é o modelo «pull»: o servidor de backups puxa os dados com uma chave só de leitura e a produção não tem credenciais para lá chegar.
# ~/.ssh/authorized_keys em srv-web01: esta chave só pode ler /srv/www
command="rrsync -ro /srv/www",restrict ssh-ed25519 <chave-pública> aluno@hjfr
Verificar antes de confiar. Ensaie com -n sempre que mudar um comando com --delete, use --max-delete nos scripts e trate o código 25 como alerta: um ensaio que de repente lista centenas de ficheiros alterados é, em si, sinal de que algo está a cifrar ou a apagar dados. Verifique os backups com rsync -anic, que apanha corrupção silenciosa, e teste os restauros para uma pasta nova.
Experimente no simulador interativo
O simulador recria um laboratório: a pasta projeto/ e, em backup/, a cópia de ontem — com ficheiros alterados, novos, um que já não existe na origem e um PDF corrompido que o quick check não deteta. À esquerda, origem e destino lado a lado, com um símbolo para o que cada comando fez a cada ficheiro; à direita, o terminal. Demonstrar tudo segue os capítulos do vídeo; Anterior e Seguinte navegam; Repor estado volta ao início.
Erros comuns e boas práticas
- Errar a barra final:
projetoeprojeto/não são o mesmo. Confirme no ensaio onde vão parar os ficheiros. - Usar
--deletesem ensaio: primeiro-n; em scripts,--max-deletee verificação do código de saída. - Confundir espelho com backup: um espelho replica apagamentos e ficheiros cifrados. Guarde versões.
- Usar só
-r: sem o-a, perdem-se datas e permissões e cada execução copia tudo outra vez. - Ignorar a ordem dos filtros: os
--includevêm antes do--exclude='*'. - Esquecer o que o
-anão inclui: ACL, atributos estendidos e ligações físicas exigem-A,-Xe-H.
Conclusão
O rsync resume-se a poucas ideias: a barra final decide onde os ficheiros vão parar, o -a garante cópias fiéis, o -n mostra o que vai acontecer antes de acontecer, e o --delete, os filtros, o SSH e o --link-dest fazem dele um motor de backups. A regra que fica: ensaiar sempre, guardar versões e proteger o destino. Para o transporte, veja o nosso artigo sobre o ssh e o scp; para juntar e comprimir uma cópia num só ficheiro, o guia do tar e do gzip.
Workshop — Linha de Comandos Linux
Quer passar da leitura à prática, com exercícios reais e acompanhamento? No workshop Linha de Comandos Linux da HJFR trabalha estes e outros comandos da série — da administração do dia a dia à resposta a incidentes.
Este artigo faz parte da série «Comandos Linux, um a um» do blog HJFR — fique atento aos próximos comandos.
