/ / Automatyzacja procesu usuwania starych plików dziennika

Automatyzacja procesu usuwania starych plików dziennika

Wiele usług i programów generuje logipliki jako ścieżka audytu dla wszystkiego, co robią, jednak niewiele ma funkcję, która usuwa te pliki, gdy przestają być przydatne. W rezultacie te pliki dziennika siedzą w twoim systemie i pochłaniają miejsce (czasem więcej niż wiesz) i zaśmiecają katalogi na czas, gdy potrzebujesz do nich dostępu.

Więc jeśli nie potrzebujesz tych plików, po co je przechowywać? Pokażemy Ci, jak łatwo usunąć te stare pliki dziennika, aby system był miły i uporządkowany.

Oczywiście, podczas gdy poniższe omówienie są natychmiast przydatne do zarządzania plikami dziennika, możesz również zastosować te same techniki do każdego innego typu „wygasającego” pliku (takiego jak kopie zapasowe).

Usuń pliki na podstawie daty ostatniej modyfikacji

Jeśli chcesz wyczyścić istniejące pliki dziennika wyłącznie na podstawie daty ostatniej modyfikacji pliku, wystarczy użyć polecenia FORFILES. Na przykład:

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

Powyższe polecenie spowoduje usunięcie wszystkich plików z folderu „C: LogFiles” i wszystkich podfolderów, które nie zostały zmodyfikowane w ostatnim tygodniu.

Polecenie FORFILES jest dość elastyczne dziękiwyszukiwanie wzorca i funkcje daty. Na przykład zamiast liczby możesz wprowadzić datę, np. „-1/13/2010”, aby usunąć pliki ostatnio zmodyfikowane przed określoną datą.

Aby uzyskać wszystkie szczegółowe informacje o tym, co może zrobić FORFILES, przejrzyj pomoc online za pomocą następującego polecenia w wierszu polecenia:

FORFILES /?

Usuń pliki na podstawie wzorca daty w nazwie pliku

Wiele aplikacji i usług tworzy pliki dziennikaw oparciu o wzorzec daty, aby mieć jeden plik dziennika na dzień (tj. Log100113.txt, Backup-2010-01-13.zip itp.). W przypadku tego typu plików lepiej jest usunąć na podstawie daty pliku dołączonego do nazwy pliku niż daty ostatniej modyfikacji. Jest to przydatne w scenariuszach, takich jak przechowywanie wszystkich plików dziennika z ostatnich 3 miesięcy. Niestety, Windows nie ma natywnego polecenia z tego rodzaju logiką, ale za pomocą skryptu wsadowego możemy łatwo obsłużyć to zadanie.

W komentarzach dotyczących użycia skryptu znajdują się przykłady, więc jego zrozumienie powinno być dość łatwe.

Scenariusz

@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

Automatyzacja procesu

Polecenie FORFILES jest rodzime dla systemu Windows,jednak skrypt DeleteByDatePattern powinien zostać umieszczony w folderze zdefiniowanym w zmiennej Path (takiej jak folder Windows), aby można go było wywołać tak, jakby był rodzimym poleceniem. Po wykonaniu tej czynności możesz utworzyć zaplanowane zadanie, które będzie albo pojedynczym poleceniem (jeśli musisz usunąć tylko z jednej lokalizacji), albo plikiem wsadowym (jeśli musisz usunąć z wielu lokalizacji), który będzie uruchamiany codziennie, co tydzień, co miesiąc lub kiedykolwiek.

Jeszcze jedna rzecz, którą możesz ustawić i zapomnieć.

Spinki do mankietów

Pobierz skrypt Usuń według wzoru daty z Sysadmin Geek