Tenho um aplicativo que faz backups diários automáticos às 23h em um diretório dirA
. Cada backup é um único arquivo .tar e tem uma convenção de nomenclatura aparentemente aleatória sobre a qual não tenho controle (por exemplo 129d3139.tar
, , 4a98bb6b.tar
, etc).
Como dirA
reside em um meio de armazenamento que é muito limitado em espaço, tenho um cron job cinco minutos depois, às 23h05, que exclui todos os backups, exceto o mais recente. O script bash " clear_old_backups.sh
" se parece com isso e funciona bem (graças a esta resposta ):
#!/usr/bin/env bash
find /path/to/dirA/ -type f -printf '%T@\t%p\n' |
sort -t $'\t' -g |
head -n -1 |
cut -d $'\t' -f 2- |
xargs -r rm
Agora, além disso, estou procurando manter alguns backups arquivados mais antigos em outro meio de armazenamento maior, em um segundo diretório dirB
. Idealmente, dentro, dirB
eu gostaria de ter arquivos x4:
1 dia de idade (apenas uma cópia direta do único armazenado em dirA
), depois adicionalmente 1 semana de idade, 1 mês de idade e 6 meses de idade.
Alguém pode ajudar com um script bash que copie e mantenha os arquivos de backup relevantes?
Não tenho certeza por onde começar - preciso de alguma forma verificar com muito mais regularidade se o timestamp de um arquivo atingiu "agora menos 7 dias", etc? E só então agir de acordo?
O sistema operacional é Debian 12.
Com base na discussão nos comentários, proponho a seguinte solução:
Em sua tarefa cron diária...
dirA
paradirB/daily
e renomeie-o com base na data.dirB/weekly
.dirB/monthly
.daily
,weekly
emonthly
, use a abordagem conhecida para remover todos os arquivos, exceto os N mais recentes, por exemplo, 8 arquivos de backup diários, 5 semanais ou 7 mensais.Para renomear o arquivo com base na data e para todas as verificações de data, você pode usar o
date
comando com diferentes especificadores de formato, consulteman date
.O script a seguir não foi testado, verificado apenas pelo shellcheck.net.