Linux / Comando rsync: sincronizar diretórios e revisar exclusões

O comando rsync copia arquivos e sincroniza diretórios locais ou remotos, selecionando por padrão os arquivos cujo tamanho ou horário de modificação mudou. Antes de executar, confira a origem, o destino e a barra final do caminho; com --delete, arquivos exclusivos do destino podem ser apagados.

A seleção dos arquivos e a forma de transferir seu conteúdo são decisões diferentes. O algoritmo de diferenças do rsync pode reduzir os dados enviados pela rede; em cópias entre caminhos locais, a transferência do arquivo inteiro é o padrão normal. Uma sincronização também pode reproduzir erros e corrupção da origem, portanto não substitui, sozinha, uma política de backup com versões e restauração testada.

Sintaxe e preparação

rsync [opções] origem destino

Essa linha é uma descrição, não um comando pronto. Confira rsync --version e man rsync no seu ambiente. Para os exemplos locais, prepare o diretório project/ com arquivos de teste e um destino separado; confirme que o diretório pai backup/ existe. Use caminhos que você possa ler e gravar e confira o espaço livre antes de copiar.

No formato remoto com um único dois-pontos, como usuário@host:caminho, o rsync usa um shell remoto, normalmente SSH. O programa precisa estar instalado nas duas pontas e a conta remota deve ter as permissões necessárias. Verifique a identidade do servidor conforme o guia de acesso SSH e verificação da chave de host. O formato de daemon host::módulo e os endereços rsync:// representam outro modo de conexão; não presuma que ele ofereça a criptografia do SSH.

Exemplos de sincronização

Simular antes de alterar: execute primeiro a versão com --dry-run. Leia a lista e confirme se os arquivos planejados pertencem ao diretório correto. A opção -v torna a saída mais descritiva.

rsync -av --dry-run project/ backup/project/

Copiar os arquivos locais: depois de revisar a simulação, a mesma operação sem --dry-run aplica as alterações. O conteúdo de project/ vai para backup/project/. Esses comandos não incluem --delete; não solicitam a remoção geral dos arquivos que existem somente no destino.

rsync -av project/ backup/project/

Enviar ao servidor por SSH: substitua alice, o host e o caminho pelos valores autorizados. server.example.com é um nome ilustrativo. Confirme antes o diretório remoto e as permissões; este comando aplica mudanças e não é uma simulação.

rsync -av project/ alice@server.example.com:/home/alice/project/

Para revisar também o envio remoto, acrescente --dry-run antes da execução real, mantendo os mesmos caminhos e opções. Uma simulação remota ainda precisa estabelecer a comunicação e ler as informações necessárias; “não copiar dados de arquivos” não significa “não acessar o servidor”.

Barra final e leitura da simulação

A barra final da origem muda a estrutura copiada. Com um diretório backup/ já existente, copiar source/ coloca seu conteúdo diretamente nele: source/notes.txt corresponde a backup/notes.txt. Copiar source, sem a barra, coloca o diretório pelo nome dentro do destino: backup/source/notes.txt. Especificar a existência do destino evita confundir essa regra com as regras de renomeação de um destino novo.

rsync -av --dry-run source/ backup/

O bloco abaixo é um recorte ilustrativo da saída quando source/notes.txt existe e ainda não está no destino. A mensagem continua em inglês porque representa o texto do programa; não é uma transferência medida neste artigo nem a saída completa de todas as versões.

sending incremental file list
notes.txt

O nome notes.txt indica um arquivo planejado na simulação, não um arquivo já copiado. O --dry-run não modifica os arquivos de destino. Ele também não garante que uma execução posterior terá sucesso: espaço, permissões ou o conteúdo da origem podem mudar entre as duas execuções.

  1. Confirme caminhos absolutos ou o diretório atual, a barra final da origem e a separação entre origem e destino.
  2. Faça uma simulação com as mesmas opções que pretende usar. Se houver exclusão, confira especificamente a lista de itens que serão apagados.
  3. Execute a cópia somente após revisar o plano. Verifique o código de saída e as mensagens; um erro pode deixar apenas parte da sincronização concluída.
  4. Confira a estrutura e os arquivos importantes no destino e teste a restauração em outro local, sem sobrescrever a única cópia original.

Contagem e tamanho ajudam a perceber omissões, mas não comprovam conteúdo idêntico. Se a integridade exigir isso, compare também hashes adequados. A opção -c usa uma soma de verificação para decidir quais arquivos precisam ser atualizados, em vez da comparação padrão de tamanho e modificação; isso exige leitura adicional dos arquivos. Essa decisão anterior à transferência é diferente da verificação que o rsync normalmente realiza ao reconstruir os arquivos transferidos.

Opções principais

Opção Finalidade e condição
-a Modo de arquivamento: combina recursão e preservação de vários atributos. Não inclui automaticamente listas de controle de acesso (ACLs), atributos estendidos ou preservação de hard links (vários nomes para o mesmo arquivo).
-v Mostra mais informações sobre a operação. Uma lista exibida com simulação não comprova que os arquivos foram gravados.
-n, --dry-run Simula a operação sem aplicar mudanças. Revise os mesmos caminhos, filtros e opções previstos para a execução real.
--delete Remove do lado receptor os itens ausentes da origem, dentro dos diretórios sincronizados e conforme as regras de filtro. Revise primeiro com simulação.
--exclude=padrão Exclui da transferência os nomes correspondentes ao padrão. Proteja o argumento das expansões indevidas do shell e confira sua interação com exclusões.
-e 'ssh -p porta' Define o comando de shell remoto e a porta SSH. Substitua “porta” pelo número real; isso não configura o servidor.

Exclusões, metadados e backup

O --delete não é necessário para copiar as alterações dos arquivos: ele serve para remover itens excedentes no destino. Um caminho errado, uma origem incompleta ou uma montagem ausente podem mudar drasticamente o que será considerado excedente. Não use uma pasta com dados exclusivos importantes como espelho descartável sem uma cópia independente.

Por padrão, arquivos excluídos por filtros também ficam protegidos contra a exclusão no destino. Opções como --delete-excluded e regras aplicadas somente ao lado remetente alteram esse comportamento. Por isso, não presuma que um padrão garante proteção em qualquer combinação de opções. Reveja os filtros junto com a lista de exclusões, não apenas a lista de transferências.

O modo -a não é uma garantia de cópia integral de metadados. Listas de controle de acesso (ACLs), atributos estendidos e relações de hard links — vários nomes ligados ao mesmo arquivo — exigem avaliação de opções como -A, -X e -H. O resultado depende do suporte das duas pontas, do sistema de arquivos e das permissões. Não acrescente essas opções sem entender quais atributos sua restauração precisa recuperar.

Para planejar a recuperação, consulte o guia de backup com tar e verificação da restauração, em inglês. A configuração de backups de servidor e verificações independentes, em inglês ajuda a separar “o comando executou” de “os dados continuam recuperáveis”.

Na verificação dos exemplos, o ambiente disponível era o Git Bash no Windows e não havia rsync instalado. Os quatro comandos executáveis passaram somente na análise de sintaxe do Bash; não foram realizadas cópias, exclusões, preservação de metadados, acesso remoto nem testes nativos do Linux. A estrutura de diretórios e as opções descritas acima foram conferidas no manual oficial.

Pergunta frequente

Qual é a diferença entre source e source/ no rsync?

Ao copiar para um diretório de destino já existente, source/ copia o conteúdo da origem diretamente para ele; source cria ali o nível de diretório source. Confira também as regras para destinos inexistentes e valide a disposição com --dry-run.

Documentação oficial

O manual oficial do rsync detalha caminhos, seleção por tamanho e modificação, modo de arquivamento, simulação, filtros e exclusões. Confira também o manual da versão instalada para identificar diferenças de suporte.