J'ai une monture sur laquelle je stocke mes sauvegardes de base de données et, pour éviter toute prolifération incontrôlable, je souhaite uniquement conserver des sauvegardes d'une durée de 30 jours, mais également des sauvegardes créées tous les 15 jours. Donc, à l'expiration du délai de 30 jours, si le dossier a été créé le 1er ou le 15, j'aimerais qu'il reste également.
J'utilise actuellement cette option pour ne conserver que les sauvegardes pendant 30 jours. Comment puis-je omettre les dossiers créés le 1er et le 15?
find /mnt/clusterfs01-data01/db01/* -type d -ctime +30 -exec rm -rf {} \;
Exemple de liste de répertoires pour les noms de dossiers.
0 drwx------ 7 root root 324 Nov 11 01:35 2016-11-11_01-31-41
0 drwx------ 7 root root 250 Nov 11 06:25 2016-11-11_06-25-03
Je ne crains pas une solution autre que find
.
Pour exclure les correspondances basées sur la chaîne datetime du nom de répertoire, vous pouvez ajouter
! \( -name '????-15-??*' -o -name '????-30-??*' \)
ou
-not \( -name '????-15-??*' -o -name '????-30-??*' \)
à la commande find
.
Si vous voulez vraiment vous baser sur l'horodatage, la seule façon dont je peux penser est de faire quelque chose comme (note J'utilise mtime
ici depuis votre touch
les commandes ne semblent pas modifier la ctime
sur mon système: changez %Td
en %Cd
pour ctime
):
find dir -type d -mtime +30 -printf '%Td\t%p\0' |
while read -rd '' day dir; do
case "$day" in
15|30) ;;
*) echo rm -rf -- "$dir";;
esac
done
Essaye celui-là:
rm -rf $(find /mnt/clusterfs01-data01/db01/* -maxdepth 0 -type d -ctime +30 | grep -v "[0-9]\{4\}-01\|15-[0-9]\{2\}")