Como usar o rsync para excluir arquivos com mais de 1 semana

2

Eu uso o rsync para fazer backups de arquivos e pastas:

 rsync -avqz --stats --delete /media/server/ /media/Server2/

Isso exclui os arquivos que não estão presentes na origem e garante que o destino seja uma cópia exata da origem

Mas meu chefe quer que eu exclua apenas os arquivos que não estão presentes na fonte e têm 1 semana de vida. Algo como:

rsync -avqz --stats --delete(1 week old) /media/server/ /media/Server2/

Alguma idéia?

    
por CAFxX 15.10.2010 / 05:48

5 respostas

4

eu recomendaria a você e ao seu chefe que configurassem o rsnapshot. Ele vai lhe dar instantâneos com tanta frequência e voltar o quanto quiser.

    
por 15.10.2010 / 05:53
3

O Rsync não suporta este comportamento fora da caixa. Você pode encontrar outra ferramenta como rsnapshot como Jaylen sugeriu ser uma boa jogada.

Se você realmente quiser fazer exatamente o que descreve, veja o que você pode fazer.

  • Primeiro, execute seu rsync SEM uma exclusão. Isso copiará tudo dos seus dados ao vivo para o seu backup.
  • Em seguida, execute o rsync novamente com a exclusão, mas desta vez no modo de teste (-n). Isso gerará uma lista de arquivos a serem excluídos com base no que foi excluído nos dados ativos, mas ainda não nos backups. Salve esta saída em um arquivo com a data.
  • Agora, mantenha essa lista de itens a serem excluídos, mas processe-os apenas uma semana depois. Mantenha uma fila e processe apenas as sugestões de exclusão que estão na fila há pelo menos uma semana.

Como alternativa, use a saída de rsync --delete -n , mas, em vez de enfileirar, use outra verificação, como a data da última modificação no backup, para garantir que você exclua apenas coisas que não foram editadas em uma semana. Esse não é exatamente o comportamento que você pediu, mas seria mais fácil de programar e poderia ser suficiente.

    
por 19.10.2010 / 12:26
2

Uma ferramenta alternativa é rdiff-backup : link , que mantém um espelho e um configurável por data, backup incremental.

    
por 22.05.2012 / 21:05
1

Simplesmente você pode escrever um pequeno script bash para executar rsync e deletar arquivos de 7 dias. então você pode rodar esse script usando o crontab.

#----------------------------------------------------------
    #!/bin/bash

    rsync -avqz --stats --delete /media/server/ /media/Server2/
    find /media/Server2/* -mtime +7 -exec rm {} \;
#-------------------End of the script-----------------------
    
por 07.12.2017 / 09:43
0

O rsync fará isso com um pequeno ajuste ...

na máquina que você deseja fazer backup, execute o comando:

rsync -abvh --backup-dir=../oldcopysfilesdir/'date +%Y-%m-%d_%H.%M' --delete /path/to/source/ [email protected]:/path/to/target

isto fará backup de arquivos e pastas e criará uma pasta "oldcopysfilesdir" na máquina de destino com todas as cópias antigas de arquivos e pastas alterados, tudo em pastas com registro de data e hora específicas.

para excluir copys antigos na pasta "oldcopysfilesdir" na execução da máquina de destino:

find /path/to/oldcopysfilesdir/* -mtime +7 -delete

esse comando excluirá arquivos e pastas antigos com mais de 7 dias, mas apenas cópias antigas de arquivos alterados. Em "/ path / to / target" sempre haverá um espelho atualizado do diretório "/ path / to / source /". Para autografar, crie tarefas anacron ou cron para os comandos.

    
por 27.08.2017 / 07:59