in

Automatisation du processus de suppression des anciens fichiers journaux

De nombreux services et programmes produisent des fichiers journaux comme une piste d’audit pour tout ce qu’ils font, mais peu ont une fonction qui supprime ces fichiers car ils perdent leur utilité. En conséquence, ces fichiers journaux se trouvent sur votre système et consomment de l’espace (parfois plus que vous ne le pensez) et encombrent les répertoires pour les moments où vous devez y accéder.

Donc, si vous n’avez pas besoin de ces fichiers, pourquoi les conserver? Nous allons vous montrer comment supprimer facilement ces anciens fichiers journaux pour que votre système reste en ordre et en ordre.

Bien sûr, bien que les éléments que nous couvrons ci-dessous soient immédiatement utiles pour gérer les fichiers journaux, vous pouvez également appliquer les mêmes techniques à tout autre type de fichier «expirant» (comme les sauvegardes).

Supprimer les fichiers en fonction de la date de la dernière modification

Si vous souhaitez effacer vos fichiers journaux existants uniquement en fonction de la dernière date de modification du fichier, il vous suffit d’utiliser la commande FORFILES. Par exemple:

FORFILES / P « C: LogFiles » / S / D -7 / C « CMD / C DEL / F / Q @PATH »

La commande ci-dessus supprimerait tous les fichiers du dossier «C: LogFiles» et tous les sous-dossiers qui n’ont pas été modifiés la semaine dernière.

La commande FORFILES est assez flexible avec les fonctions de modèle de recherche et de date. Par exemple, à la place d’un nombre, vous pouvez entrer une date telle que «-1/13/2010» pour supprimer les fichiers modifiés pour la dernière fois avant la date spécifiée.

Pour obtenir tous les détails sur ce que FORFILES peut faire, consultez l’aide en ligne à l’aide de la commande suivante à partir de l’invite de commande:

FORFILES /?

Supprimer des fichiers en fonction d’un modèle de date dans le nom de fichier

De nombreuses applications et services produisent des fichiers journaux basés sur un modèle de date afin d’avoir un fichier journal par jour (par exemple, Log100113.txt, Backup-2010-01-13.zip, etc.). Pour ces types de fichiers, il est préférable de supprimer en fonction de la date du fichier incorporé dans le nom du fichier plutôt que de la date de la dernière modification. Ceci est utile pour des scénarios tels que la conservation de tous les fichiers journaux au cours des 3 derniers mois. Malheureusement, Windows n’a pas de commande native avec ce type de logique mais avec un script batch nous pouvons facilement gérer cette tâche.

Il y a des exemples inclus dans les commentaires d’utilisation du script, donc cela devrait être assez facile à comprendre.

Le scénario

@ECHO OFF
ECHO Delete By Date Pattern
ECHO Written by: Jason Faulkner
ECHO SysadminGeek.com
ECHO.
ECHO.

REM Delete/Select files based on a date which utilizes MM and/or DD for file naming patterns.
REM
REM Usage:
REM DeleteByDatePattern {/M | /D} NumberToKeep Path PatternPrefix PatternPostfix [/L | /DEL]
REM    /M     Specifies the pattern being used is based on months.
REM    /D     Specifies the pattern being used is based on days.
REM    NumberToKeep
REM           The number of months (/M) or days (/D) to keep, including the current.
REM           For example, entering 1 keeps only the current month/day and 6 would keep the current minus 5.
REM    Path   The root location to search. Subdirectories will be searched.
REM    PatternPrefix
REM           The file search pattern placed before of the month/day when building the search string.
REM    PatternPostfix
REM           The file search pattern placed after of the month/day when building the search string.
REM    /L     (optional) Lists all files matching the pattern, but does not delete them.
REM    /DEL   (optional) Deletes all files matching the pattern.
REM
REM Examples:
REM    DeleteByDatePattern /M 3 "%WinDir%system32LogFiles" ex?? ??.log /DEL
REM       Deletes all IIS log files (Windows Server 2003) except for the current and previous two months.
REM    DeleteByDatePattern /D 7 "D:Backup" *-????-??- .zip /DEL
REM       Deletes all zip files from the D:Backup folder except for the current week.
REM       The file name pattern assumed above is "*-YYYY-MM-DD.zip"
REM    DeleteByDatePattern /M 0 "C:" *( )* /L
REM       Prints a list of all files on the C drive matching the pattern: "*-MM-*" (where MM is replaced with 01-12)
REM    DeleteByDatePattern /D 14 "C:Logs" Log-???? .txt
REM       Prints a list of all patterns which would be processed by the script.

SETLOCAL EnableExtensions EnableDelayedExpansion

REM Assumes your Windows Date/Time settings are set to 'DayOfWeek M/D/YYYY' format.
REM If your format is different, you will need to alter the variables below so they align.
FOR /F "tokens=1,2,3,4 delims=/ " %%A IN ('DATE /T') DO (
   SET Month=%%B
   SET Day=%%C
   SET Year=%%D
)

IF /I {%1}=={/M} (
   SET Keep=%Month%
   SET Max=12
)
IF /I {%1}=={/D} (
   SET Keep=%Day%
   SET Max=31
   REM Working off of the previous month's max days.
   SET /A PrevMonth=%Month%-1
   IF !PrevMonth! EQU 2 (
      SET Max=28
      REM Leap years... add more as needed.
      IF /I %Year% EQU 2012 SET Max=29
      IF /I %Year% EQU 2016 SET Max=29
   )
   IF /I !PrevMonth! EQU 4 SET Max=30
   IF /I !PrevMonth! EQU 6 SET Max=30
   IF /I !PrevMonth! EQU 9 SET Max=30
   IF /I !PrevMonth! EQU 11 SET Max=30
)
SET Current=%Keep%
SET /A Keep=%Keep%-%2+1

REM Determine the range to be removed.
SET /A RemoveHighStart=%Current%+1
IF /I %Keep% LSS 1 (
   SET RemoveLow=0
   SET /A RemoveHighEnd=%Keep%+%Max%-1
) ELSE (
   SET /A RemoveLow=%Keep%-1
   SET RemoveHighEnd=%Max%
)

REM Process all less than the low range.
FOR /L %%Z IN (1,1,%RemoveLow%) DO CALL :Process %%Z %3 %4 %5 %6
REM Process all greater than the high range.
FOR /L %%Z IN (%RemoveHighStart%,1,%RemoveHighEnd%) DO CALL :Process %%Z %3 %4 %5 %6

ENDLOCAL
GOTO End

:Process
SET Key=0%1
SET Key=%Key:~-2%
SET Target="%~2%~3%Key%%~4"
ECHO Target Pattern: %Target%

IF /I {%5}=={/L} DIR %Target% /B /S
IF /I {%5}=={/DEL} DEL /F /S /Q %Target%
GOTO End

:End

Automatiser le processus

La commande FORFILES est native de Windows, mais le script DeleteByDatePattern doit être placé dans un dossier défini dans votre variable Path (tel que votre dossier Windows) afin qu’il puisse être appelé comme s’il s’agissait d’une commande native. Une fois que cela est fait, vous pouvez créer une tâche planifiée qui est soit une commande unique (si vous ne devez supprimer qu’à partir d’un seul emplacement) ou un fichier de commandes (si vous devez supprimer à partir de plusieurs emplacements) qui s’exécute quotidiennement, hebdomadairement, mensuellement ou quand.

Encore une chose que vous pouvez définir et oublier.

Liens

Télécharger le script Delete By Date Pattern depuis Sysadmin Geek

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous ne recevez pas de notifications macOS?  Voici comment y remédier (sans redémarrage)

Vous ne recevez pas de notifications macOS? Voici comment y remédier (sans redémarrage)

Quel nom est correct, exFAT ou FAT64?

Quel nom est correct, exFAT ou FAT64?