Como faço para excluir arquivos rsync que foram apagados da pasta de origem?

118

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.

    
por user254251 03.06.2014 / 05:53

3 respostas

130

Para excluir arquivos no destino, adicione a opção --delete ao seu comando. Por exemplo:

rsync -avh source/ dest/ --delete
    
por GarethD 26.08.2015 / 09:14
31

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:

  1. rsync exclua o arquivo de TARGET que foi removido de SOURCE.
  2. rsync inicia a sincronização de arquivos.

--delete-after receiver deletes after transfer, not during

Significa que:

  1. rsync inicia a sincronização de arquivos.
  2. rsync exclua o arquivo do TARGET que foi removido da SOURCE após a sincronização.

OBSERVAÇÃO : o --delete-{before/after} implementa apenas no TARGET.

    
por shgnInc 03.06.2014 / 06:13
5

Este comando copia os dados de incremento e os mantém em sincronia com o servidor remoto.

  1. Ele copiará apenas dados incrementais.
  2. Ele será excluído se quaisquer dados forem excluídos da origem.
  3. Ele será copiado novamente da origem se algum dado for excluído no destino.
  4. basicamente, esse comando manterá o ambiente em sincronia.

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
    
por Ganesh Ghube 29.07.2015 / 14:12