Sincronizando e fazendo backup de arquivos com rsync

Tabela de Conteúdo

Copiar arquivos com cp funciona, mas quando o diretório é grande e você só quer atualizar o que mudou, ele reescreve tudo de novo. O rsync resolve isso: ele compara origem e destino e transfere só a diferença.

Sincronizando localmente

$ rsync -avz /origem/ /destino/
  • -a (archive) preserva permissões, links, donos e timestamps, e sincroniza subdiretórios recursivamente
  • -v mostra o que está sendo copiado
  • -z comprime os dados durante a transferência

Repare na barra no final de /origem/. Com a barra, o rsync copia o conteúdo do diretório para dentro de /destino/. Sem a barra, ele copia o diretório origem inteiro para dentro de /destino/.

Simulando antes de executar

Antes de rodar de verdade, principalmente com --delete, vale simular:

$ rsync -avz --dry-run /origem/ /destino/

Nada é copiado, só mostra o que seria feito.

Sincronizando via SSH

Pra outro servidor, basta indicar o destino como usuário@host:caminho:

$ rsync -avz -e ssh /origem/ usuario@servidor:/destino/

Se a porta do SSH não for a padrão:

$ rsync -avz -e "ssh -p 2222" /origem/ usuario@servidor:/destino/

Removendo no destino o que sumiu na origem

Por padrão o rsync só copia e atualiza, nunca apaga. Se quiser que o destino fique idêntico à origem, incluindo remover arquivos que não existem mais:

$ rsync -avz --delete /origem/ /destino/

Use com cuidado — combine sempre com --dry-run primeiro pra conferir o que seria apagado.

Ignorando arquivos e diretórios

$ rsync -avz --exclude '*.log' --exclude 'node_modules/' /origem/ /destino/

Simples assim :)