rsync destino baseado na data do arquivo

1

Eu tenho um grande diretório de arquivos de log em um servidor. Todos os logs estão em um grande diretório.

Gostaríamos de fazer backup deles para outro host (nosso servidor de arquivamento) e manter apenas os últimos 90 dias de backups no servidor 'ao vivo'.

no entanto, devido ao grande número de logs que geramos com esse aplicativo, criamos uma pasta massiva que seria difícil de navegar. É possível, com RSYNC, especificar as pastas de destino com base na data do arquivo (não na data atual) ..

Por exemplo ..

rsync <options> /logs/*.log ArchiveServer:/archive/ServerA/logs/<YYYY>/<MM>
where application.20111230.log gets dumped to /archive/ServerA/logs/2011/12
and application.20120301.log gets dumped to /archive/ServerA/logs/2012/03

Eu poderia despejar todos eles em uma pasta genérica, como / archive / ServerA / Current / e, em seguida, talvez semanalmente procure por arquivos com mais de 90 dias e os ordene então .. mas fazê-lo diretamente no rsync parece que seria muito mais limpo (e eu não teria dois lugares para procurar logs dependendo de quão novo é)

    
por Brian 19.03.2012 / 15:46

1 resposta

4

Algo parecido com isto?

rsync /logs/*.$(date '+%Y%m%d').log ArchiveServer:/archive/ServerA/logs/$(date '+%Y')/$(date '+%m')/

Atualização:

Certo, então a data já está no nome do arquivo de log. Eu deveria ter lido mais devagar.

Eu não acho que você faria isso diretamente com o rsync, mas encerraria as coisas em um script. Se você quiser bater as coisas em uma primeira corrida, algo como:

for daysago in 'seq 0 90'
do
  rsync /logs/*.$(date '+%Y%m%d' -d "$daysago days ago").log ArchiveServer:/archive/ServerA/logs/$(date '+%Y' -d "$daysago days ago")/$(date '+%m' -d "$daysago days ago")/
done

Você pode colocar um "eco" na frente do comando rsync no loop para ver se é isso que você quer.

O que você fizer irá incorporar esses elementos, embora outras pessoas sejam mais espertas e elegantes sobre o script de shell que eu.

    
por 19.03.2012 / 15:53

Tags