Introdução ao `rsync`
Em projetos de qualquer tamanho, a cópia e sincronização de arquivos é uma tarefa recorrente. Seja para backups, migração de dados entre servidores ou para manter cópias locais de arquivos remotos, a eficiência e a segurança são cruciais. O comando `rsync` (remote sync) é uma ferramenta poderosa e versátil para essa finalidade. Ele permite sincronizar arquivos e diretórios entre duas localizações, seja no mesmo host ou em hosts diferentes através de SSH, de maneira incremental, transferindo apenas as partes dos arquivos que foram modificadas. Isso o torna significativamente mais rápido e eficiente que um simples `cp` ou `scp` para grandes volumes de dados ou em conexões de rede instáveis.
Instalação e Verificação
O `rsync` é uma ferramenta padrão na maioria das distribuições Linux. Para verificar se ele está instalado em seu sistema, abra um terminal e digite:
rsync --versionSe o comando retornar a versão do `rsync`, ele já está pronto para uso. Caso contrário, você pode instalá-lo usando o gerenciador de pacotes da sua distribuição:
- Debian/Ubuntu:
sudo apt update && sudo apt install rsync - Fedora/CentOS/RHEL:
sudo dnf install rsyncousudo yum install rsync
Sintaxe Básica e Opções Essenciais
A sintaxe geral do `rsync` é:
rsync [OPÇÕES] ORIGEM DESTINOOnde ORIGEM é o arquivo ou diretório a ser copiado e DESTINO é o local onde ele será copiado. As opções são fundamentais para controlar o comportamento do `rsync`:
-a(archive): Este é um modo de conveniência que combina várias opções úteis para cópia de arquivos, como preservação de permissões, timestamps, propriedade, links simbólicos e recursividade. É amplamente recomendado para a maioria dos usos.-v(verbose): Aumenta a verbosidade da saída, mostrando quais arquivos estão sendo transferidos. Útil para acompanhar o progresso.-z(compress): Comprime os dados dos arquivos durante a transferência. Isso pode acelerar a transferência em redes mais lentas, mas aumenta o uso da CPU.-h(human-readable): Exibe tamanhos de arquivo em um formato legível para humanos (ex: KB, MB, GB).--progress: Mostra o progresso da transferência para cada arquivo.--delete: Remove arquivos no destino que não existem mais na origem. Use com extrema cautela, pois isso pode apagar dados!-e ssh: Especifica o shell remoto a ser usado. Por padrão, o `rsync` usa SSH para transferências remotas, mas esta opção pode ser usada para especificar portas customizadas (ex:-e 'ssh -p 2222').
Cenários de Uso Prático
1. Backup Local Simples
Para fazer um backup de um diretório local em outro local no mesmo disco ou em um disco externo:
rsync -avh --progress /caminho/para/seus/dados/ /caminho/para/backup/Explicação:
-a: Modo archive para preservar atributos dos arquivos.-v: Mostrar arquivos em transferência.-h: Formato legível para humanos.--progress: Mostrar o progresso.- Note a barra final em
/caminho/para/seus/dados/. Ela indica que o *conteúdo* do diretório deve ser copiado. Sem a barra, o diretório em si seria copiado para dentro do destino.
2. Sincronização entre Servidores (Via SSH)
Para sincronizar um diretório local com um diretório em um servidor remoto:
rsync -avzh --progress -e ssh /caminho/local/para/dados/ usuario@servidor_remoto:/caminho/remoto/para/dados/Explicação:
-z: Comprime os dados durante a transferência.-e ssh: Garante que a conexão SSH seja usada.usuario@servidor_remoto:: Especifica o usuário e o endereço do servidor remoto.
3. Limpando Arquivos Obsoletos no Destino
Se você deseja que o diretório de backup reflita exatamente o conteúdo da origem, removendo arquivos que foram deletados na origem:
rsync -avh --progress --delete /caminho/para/seus/dados/ /caminho/para/backup/Aviso de Segurança: A opção --delete é poderosa e pode levar à perda de dados se usada incorretamente. Certifique-se de que a origem e o destino estão corretos antes de executá-la.
4. Excluindo Arquivos ou Diretórios Específicos
Às vezes, você não quer copiar determinados arquivos ou diretórios. Use a opção --exclude:
rsync -avh --progress --exclude 'temp/' --exclude '*.log' /caminho/local/ /caminho/remoto/Você pode usar múltiplos --exclude. Padrões como * são suportados. Para excluir um diretório, certifique-se de incluir a barra final (ex: 'temp/').
5. Dry Run (Simulação)
Antes de executar uma operação crítica, especialmente com --delete, é altamente recomendável fazer um
Foto de Rafael Minguet Delgado no Pexels.