Effacer des fichiers plus vieux que X jours sur Windows

Quand on doit gérer des serveurs de fichiers, il arrive qu’on soit confronté à une masse de données qu’il est quasiment impossible de traiter à la main. Dans ce cas de figure, c’est un utilitaire qui est chargé de faire le travail. En général, cet outil est programmé pour fonctionner la nuit pour réaliser divers traitements longs et fastidieux.

C’est le cas par exemple quand on doit effacer périodiquement des vieux fichiers ou des sauvegardes qui sont plus anciennes que X jours.

L’interface de Windows ne permet pas d’effectuer ce genre d’opération, il faut donc passer par un langage de scripts afin d’automatiser cette tâche de suppression périodique.

Pour le système d’exploitation Windows, voici quelques techniques pour effacer des fichiers plus vieux de x jours se trouvant dans un répertoire (C:\Backups dans les exemples de scripts donnés ci-dessous).

Il est bien entendu possible d’adapter ces scripts à ses propres besoins en modifiant le répertoire de traitement.

On est souvent amené à supprimer des fichiers de logs qui se génèrent jour après jour (sauvegarde, transferts FTP…) avec la problématique de supprimer les plus anciens après un certain nombre de jours histoire de ne pas se retrouver avec des milliers de fichiers inutiles après quelques mois d’utilisation.

illustration-dos

Les scripts développés ci-dessous permettent de purger les fichiers de plus de 5 jours dans un répertoire C:\Backups.

L’utilisation de ces scripts est efficace et évite de devoir acheter un utilitaire spécialisé pour faire la même chose avec moins de souplesse.

PowerShell 3

Get-ChildItem –Path  “C:\Backups” –Recurse | Where-Object CreationTime –lt (Get-Date).AddDays(-5) | Remove-Item

PowerShell 2

Get-ChildItem –Path  “C:\Backups” –Recurse | Where-Object{$_.CreationTime –lt (Get-Date).AddDays(-5)} | Remove-Item

Pour visualiser les fichiers qui vont être supprimés, on peut utiliser le paramètre – WhatIf

Get-ChildItem –Path  “C:\Backups” –Recurse | Where-Object CreationTime –lt (Get-Date).AddDays(-5) | Remove-Item –WhatIf

Invite de commandes DOS

forfiles -p "C:\Backups" -s -m *.* -d -5 -c "cmd /c del @path"

Pour visualiser les fichiers qui vont être effacés, utiliser la commande Echo.

Robocopy (fichiers dans un répertoire Temp)

RD /S /Q “%Temp%\Temp” 2>nul & MKDIR “%Temp%\Temp” && ROBOCOPY “%Temp%\Temp” “C:\Backup” /PURGE /MT /MAXAGE:5 /NS /NC /NJH /NJS /L

Supprimez-le /L en fin de ligne pour réaliser les suppressions de fichiers. Le paramètre /E est à utiliser pour la récursion.

Il suffit ensuite d’automatiser le lancement d’un script via le planificateur des tâches de Windows pour que la tâche s’effectue régulièrement et automatiquement.

Ces divers scripts peuvent facilement être modifiés pour effectuer des traitements non pas en nombre de jours, mais aussi en nombre d’heures, de semaines, d’années…

Toutes les variations sont envisageables en faisant varier un seul paramètre.