Eu costumava ter um servidor com backups por hora / diário, todos prontamente disponíveis graças a este belo tutorial . Infelizmente, o servidor disse frito e agora tenho que fazer meus backups em um NAS que não execute 1 o meu sabor de linux favorito. Acontece que minha solução anterior não é executada no dito NAS porque sua oferta binária oferece menos opções.
No entanto, acho que hourly.n
são nomes terríveis para backups. Eu prefiro tê-los formatados como horaire_YYYY_MM_DD_HHhMM
2 para que os usuários saibam imediatamente qual backup foi feito quando.
Eu quero manter 24 backups por hora antes de manter apenas backups diários. Por favor, note que eu não quero manter backups de hora em hora para as 24 últimas horas apenas; Se por algum motivo 3 alguns backups foram ignorados, eu ainda gostaria de manter 24 backups, mesmo que alguns tenham mais de um dia de idade.
Aqui está como eu costumava proceder:
ls --format=single-column --directory --sort=time $(scheme "*") \
| tail --lines +$((backup_count + 1)) \
| xargs --verbose --delimiter="\n" rm -rf
scheme
é apenas uma função que garante a formatação correta do diretório de backup, incluindo a data. Aqui usado com *
para corresponder a cada backup por hora. ls
lista cada diretório de backup por hora, classificado de trás para frente pelo tempo de criação 4 , tails
descarta os 24 mais novos e xargs
exclui os restantes.
Agora devo garantir que apenas use opções POSIX. Eu fui primeiro com:
ls -1 -d -t "$(scheme \*)" \
| tail -n +$((backup_count + 1)) \
| sed 's/\n/%pre%/g' \
| xargs -0 rm -rf
mas ls
não expande o *
; Eu substituí-lo com find
, mas não tenho idéia de como classificar os resultados por data de criação. Gostaria de saber se eu também poderia ignorar tail
completamente graças a find
, que provavelmente é a ferramenta certa para a tarefa de qualquer maneira.
Como posso executar um comando em cada backup por hora que não é um dos 24 últimos?
horaire
em vez de hourly
porque os usuários e eu somos falantes de francês.