Para excluir arquivos no destino, adicione a opção --delete
ao seu comando. Por exemplo:
rsync -avh source/ dest/ --delete
Eu recentemente configurei uma máquina com o Ubuntu Server para hospedar servidores de jogos. Eu instalei um plugin de backup para cada servidor de jogo que cria backups freqüentes de arquivos do mundo do jogo em uma pasta específica na máquina. Também estabeleci uma tarefa cron
para copiar automaticamente esses backups para minha pasta do Dropbox toda noite usando o rsync com a opção -a
.
Após alguns meses, minha conta do Dropbox atingiu seu limite de armazenamento e percebi que não conseguiria manter muitos backups, por isso configurei o plug-in de backup do servidor de jogos para não reter tantos backups e esperei alguns dias para ver se excluiria os backups mais antigos, como está programado para ser feito semanalmente. O plug-in de backup acabou fazendo seu trabalho e excluiu os backups mais antigos, portanto, esperava que a tarefa rsync
cron excluísse subseqüentemente os backups mais antigos da minha pasta do Dropbox para corresponder à pasta de origem, mas isso não foi feito. Então eu tenho algumas perguntas:
Por padrão, rsync
apenas adiciona arquivos à pasta de destino
que foram adicionados à pasta de origem e alterar arquivos que
foram alterados na pasta de origem, mas NÃO deletar arquivos
que foram excluídos da pasta de origem?
Se for esse o caso, qual é a melhor maneira de fazer rsync
fazer isso? Eu
quer que a pasta de destino reflita perfeitamente a pasta de origem,
e isso significa excluir todos os arquivos que foram excluídos da fonte
pasta.
Eu vejo algumas opções listadas na página de manual para rsync
que podem fazer o truque, mas desde que eu não estou familiarizado.
Para excluir arquivos no destino, adicione a opção --delete
ao seu comando. Por exemplo:
rsync -avh source/ dest/ --delete
O comando rsync não excluirá nenhum arquivo enquanto você usa algumas de suas opções delete
nesse comando. Portanto, se qualquer arquivo ou pasta for adicionado na origem, ele será sincronizado para segmentar sem qualquer exclusão.
Sugiro que você use rsync
para fazer backup de arquivos de origem e use find ... rm
para arquivos de exclusão por período ou tamanho de arquivos:
rsync [options] SOURCE TARGET
find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \;
O bloco de código acima, faça um backup a partir da fonte e, em seguida, exclua todos os arquivos cuja última modificação da hora tenha ocorrido por mais de 2 meses.
UPDATE
Como eu acho que as opções delete
são apenas para TARGET, se alguns arquivos forem removidos da origem, rsync --delete
os removerá do TARGET. E a opção delete
por after
e before
, conforme mencionado em sua página do manual:
--delete-before receiver deletes before transfer, not during
Significa que:
--delete-after receiver deletes after transfer, not during
Significa que:
OBSERVAÇÃO : o --delete-{before/after}
implementa apenas no TARGET.
Este comando copia os dados de incremento e os mantém em sincronia com o servidor remoto.
rsync -avWe ssh --delete-before (source) root@localhost:(destination)
rsync -avW --delete-before -e ssh (source) root@localhost:(destination)
Exemplo:
rsync -avWe ssh --delete-before /data [email protected]:/backup
rsync -avW --delete-before -e ssh /data [email protected]:/backup