Il est très fréquent de voir les administrateurs effectuer des sauvegardes de fichiers importants ou des dumps journaliers de bases de données sans y adjoindre une nécessaire rotation et purge des fichiers afin de rationnaliser la place disque et éventuellement la sauvegarde sur bande. Mettre en place une solution scriptée de rotation permet ainsi d’automatiser encore un peu plus son quotidien et d’éviter de laisser une situation s’aggraver avec des sauvegardes qui ne se font plus ou un disque qui se remplira jusqu’à ne plus avoir d’espace disponible.
Voici un exemple de dossier dans lequel aucun dump n’est purgé alors qu’en théorie, 5 jours suffiraient.
Nous allons donc mettre en place un script batch qui fera automatiquement le travail. Pour cela, nous utiliserons les commandes FORFILES et CMD. La ligne de commande suivante permet de scanner un dossier, éventuellement de filtrer par type de fichiers, puis de supprimer tout fichier supérieur à x jours.
FORFILES /p <path> /s /m *.<type> /d -<days> /c "CMD /C ERASE /F @FILE"
Pour reprendre l’exemple du répertoire avec un reliquat de sauvegardes SQL Server (.bak), nous utiliserons ce script :
FORFILES /p F:backupTESTServeurssrv-test /s /m *.bak /d -5 /c "CMD /C ERASE /F @FILE : purge 5 jours"
A peine est-il exécuté que les dumps sont supprimés comme prévu. Ici, on a voulu filtrer les fichiers .bak et ne garder que 5 jours de sauvegarde.
Quelques informations concernant les arguments utilisés pour la commande FORFILES
- /p : indique le chemin d’accès
- /s : traite récursivement les sous-répertoires
- /m *.extension : filtre les fichiers selon un masque de recherche qui est par défaut *.*
- /d : sélectionne les fichiers dont la date de dernière modification est supérieur ou égale à + ou inférieure ou égale à -
- /c : indique la commande à exécuter pour chaque fichier
Quelques informations concernant les arguments utilisés pour la commande CMD
- /C : effectue la commande spécifiée entre guillemets
- ERASE : indique l’effacement
- /F : force la suppression de fichier(s) en lecture seule
- @file : renvoie le nom de chaque fichier
Pour connaître tous les arguments disponibles, tapez votre commande suivie de /? ou rendez-vous sur les pages Microsoft dédiées (FORFILES – CMD).

