Preciso fazer backup de dados e arquivos de configuração neste servidor, diariamente. Eu preciso manter:
- backups diários por uma semana
- backups semanais por um mês
- backups mensais por um ano
- backups anuais depois disso
Tudo isso realizado através de um script de shell executado diariamente a partir do cron.
É assim que os arquivos de backup devem aparecer após 10 anos de execução:
blog-20050103.tar.bz2
blog-20060102.tar.bz2
blog-20070101.tar.bz2
blog-20080107.tar.bz2
blog-20090105.tar.bz2
blog-20100104.tar.bz2
blog-20110103.tar.bz2
blog-20120102.tar.bz2
blog-20130107.tar.bz2
blog-20130902.tar.bz2
blog-20131007.tar.bz2
blog-20131104.tar.bz2
blog-20131202.tar.bz2
blog-20140106.tar.bz2
blog-20140203.tar.bz2
blog-20140303.tar.bz2
blog-20140407.tar.bz2
blog-20140505.tar.bz2
blog-20140602.tar.bz2
blog-20140707.tar.bz2
blog-20140728.tar.bz2
blog-20140804.tar.bz2
blog-20140811.tar.bz2
blog-20140816.tar.bz2
blog-20140817.tar.bz2
blog-20140818.tar.bz2
blog-20140819.tar.bz2
blog-20140820.tar.bz2
blog-20140821.tar.bz2
blog-20140822.tar.bz2
Respostas:
Você está seriamente projetando demais isso. Seriamente.
Aqui estão alguns pseudocódigo:
daily
diretóriodaily
backupsweekly
diretórioweekly
backupsmonthly
diretóriomonthly
backupsyearly
diretórioA quantidade de lógica que você precisa implementar é a mesma, não é? BEIJO.
Parece mais fácil:
Ou, pela contagem de arquivos em vez da idade:
fonte
Se você deseja apenas manter, por exemplo, 8 backups diários e 5 backups semanais (todos os domingos), funciona assim:
A partir de hoje (10/11/2014), isso produzirá:
Como exercício deixado para você, você só precisa excluir todos os arquivos de backup cujos nomes não aparecem no
keep
array.Se você deseja manter 13 backups mensais (primeiro domingo de cada mês) e 6 backups anuais (primeiro domingo de cada ano), as coisas ficam um pouco mais complicadas:
A partir de hoje (10/11/2014), isso produzirá:
O mesmo que acima, exclua todos os arquivos de backup não encontrados nesta matriz.
fonte
rm /dir/*.* except keep[@]
?Conforme mencionado em um comentário, normalmente é melhor delegar a tarefa de gerenciar backups em um software de gerenciamento de backup.
Mas aqui está a lógica no bash para excluir backups mais antigos conforme sua necessidade
Código PHP mostrando quais arquivos permanecerão após a execução por 3520 dias
https://ideone.com/n2ymQy
fonte