Isso deve funcionar (se você definir o caminho completo ou relativo correto, ele está atualmente no teste de diretório)
#! /bin/bash
nowday=$(date +"%d")
nowmonth=$(date +"%m")
nowyear=$(date +"%y")
#number of days since 1 Jan 1970 (today)
nowdays=$(($(date --date="20$nowyear-$nowmonth-$nowday" +"%s")/86400))
backup_dir="test/*"
#echo $backup_dir
for file in $backup_dir
do
hour=${file: -6: -4}
day=${file: -9: -7}
month=${file: -12: -10}
year=${file: -15: -13}
#number of days since 1 Jan 1970 (file)
days=$(($(date --date="20$year-$month-$day" +"%s")/86400))
if ((days < nowdays-365)); then
# more than one year
if ((10#$day == 1))&&((10#$hour == 0)); then
#day is 1 hour is 0 (we keep) use this space if you want to copy or something!
:
else
#Wrong day or hour
rm $file
fi
else if ((days < nowdays-31)); then
# more than one month (31 days)
if (((10#$day == 1))||((10#$day == 8))||((10#$day == 15))||((10#$day == 22))||((10#$day == 29)))&&((10#$hour == 0)); then
#day is 1,8,15,22,29 hour is 0 (we keep) use this space if you want to copy or something!
:
else
#Wrong day or hour
rm $file
fi
else if ((days < nowdays-7)); then
# more than one week
if ((10#$hour == 0)); then
#hour is zero se this space if you want to copy or something!
:
else
#Wrong hour
rm $file
fi
else
# less than one week (we keep) use this space if you want to copy or something!
:
fi fi fi
done
Defini um mês como 31 dias sempre para verificar se há mais de um mês. Uma vez por semana eu escolho os dias 1 8 15 22 e 29, então sempre há o primeiro dia do mês. Isso também funciona no catálogo anterior porque verifica a meia-noite para cada arquivo.
As linhas :
são apenas espaços reservados, caso você queira colocar o código lá.
Dê um cheque antes de executá-lo em tudo, caso haja um erro!