J'ai un dossier avec des fichiers dont le nom est "example_YY_MM_DD-HH.Zip" et j'ai 3 sauvegardes par jour. J'ai besoin de ça:
1) Pour les sauvegardes de plus d'une semaine, je n'en ai besoin que d'une par jour (à minuit '00' à HH)
2) Pour les sauvegardes de plus d'un mois, je n'ai besoin que d'une seule sauvegarde par semaine.
3) Pour les sauvegardes de plus d'un an, je n'ai besoin que d'une seule sauvegarde par mois (premier jour du mois)
Je n'ai que cela et je ne sais pas ce qui est mis à la partie IF.
Merci
#!/bin/sh
export NOW=$(date +"%d-%m-%Y")
export OUTPUT=/media/backup/logs/delete-old.txt
export BACKUP_DIR=
for file in $BACKUP_DIR
do
if $file
fi
done
Cela devrait fonctionner (si vous définissez le chemin d'accès complet ou relatif correct, il est actuellement sur le test de répertoire)
#! /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 si plus d'un mois. Pour une fois par semaine, je choisis les jours 1 8 15 22 et 29, donc il y a toujours le premier jour du mois. Cela fonctionne également sur le catalogue arrière car il vérifie minuit pour chaque fichier.
Le :
les lignes ne sont que des espaces réservés au cas où vous souhaiteriez y mettre du code.
Vérifiez-le avant de l'exécuter sur tout, juste au cas où il y aurait une erreur!
Il semble que ce sont des méthodes pour accomplir ce que vous recherchez.
script bash pour rechercher les anciens fichiers en fonction de la date dans le nom du fichier