Ceci devrait fonctionner (si vous définissez le chemin complet ou relatif correct, il se trouve actuellement sur le répertoire test)
#! /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
J'ai défini un mois comme 31 jours, toujours pour vérifier s'il est supérieur à un mois. Une fois par semaine, je choisis les jours 1 8 15 22 et 29, de sorte qu'il y a toujours le premier jour du mois. Cela fonctionne également sur l'arrière-catalogue car il vérifie le minuit pour chaque fichier.
En :
Les lignes sont juste des supports de placement au cas où vous voudriez y mettre du code.
Vérifiez-le avant de le lancer sur tout, au cas où il y aurait une erreur !