Pagina inicial » como » Automatizando o processo de exclusão de arquivos de log antigos

    Automatizando o processo de exclusão de arquivos de log antigos

    Muitos serviços e programas lá fora produzem arquivos de log como uma trilha de auditoria para tudo o que estão fazendo, no entanto, poucos têm uma função que remove esses arquivos à medida que sobrevivem à sua utilidade. Como resultado, esses arquivos de log ficam no seu sistema ocupando espaço (às vezes mais do que você sabe) e desordenando diretórios para os horários em que você precisa acessá-los..

    Então, se você não precisa desses arquivos, por que mantê-los? Vamos mostrar-lhe como remover facilmente esses arquivos de log antigos para manter seu sistema agradável e organizado.

    Claro, enquanto o que estamos cobrindo abaixo é imediatamente útil para gerenciar arquivos de log, você também pode aplicar as mesmas técnicas para qualquer outro tipo de arquivo "expirado" (como backups).

    Remover arquivos com base na data da última modificação

    Se você deseja limpar seus arquivos de log existentes com base apenas na data da última modificação do arquivo, tudo o que você precisa fazer é usar o comando FORFILES. Por exemplo:

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

    O comando acima excluiria todos os arquivos da pasta “C: LogFiles” e todas as subpastas que não foram modificadas na última semana..

    O comando FORFILES é bastante flexível com o padrão de pesquisa e funções de data. Por exemplo, no lugar de um número, você pode inserir uma data como "-1/13/2010" para excluir arquivos modificados pela última vez antes da data especificada.

    Para obter todos os detalhes sobre o que os FORFILES podem fazer, exiba a ajuda on-line usando o seguinte comando no prompt de comando:

    FORFILES /?

    Remover arquivos com base em um padrão de data no nome do arquivo

    Muitos aplicativos e serviços produzem arquivos de log com base em um padrão de data que tem um arquivo de log por dia (por exemplo, Log100113.txt, Backup-2010-01-13.zip, etc.). Para esses tipos de arquivos, é preferível excluir com base na data do arquivo incorporado ao nome do arquivo, e não na data da última modificação. Isso é útil para cenários como manter todos os arquivos de log dos últimos 3 meses. Infelizmente, o Windows não possui um comando nativo com este tipo de lógica, mas com um script em lote podemos facilmente lidar com essa tarefa.

    Existem exemplos incluídos nos comentários de uso do script, por isso deve ser muito fácil descobrir.

    O script

    @ ECHO OFF ECHO Eliminar por padrão de data ECHO Escrito por: Jason Faulkner ECHO SysadminGeek.com ECHO. ECO. REM Excluir / Selecionar arquivos com base em uma data que utiliza MM e / ou DD para padrões de nomenclatura de arquivos. REM REM Uso: REM DeleteByDatePattern / M | / D NumberToKeep Path PatternPrefix PatternPostfix [/ L | / DEL] REM / M Especifica que o padrão que está sendo usado é baseado em meses. REM / D Especifica que o padrão que está sendo usado é baseado em dias. REM NumberToKeep REM O número de meses (/ M) ou dias (/ D) para manter, incluindo o atual. REM Por exemplo, inserir 1 mantém apenas o mês / dia atual e 6 manterá o atual menos 5. REM Caminho O local raiz a ser pesquisado. Subdiretórios serão pesquisados. REM PatternPrefix REM O padrão de pesquisa de arquivos colocado antes do mês / dia ao construir a string de pesquisa. REM PatternPostfix REM O padrão de pesquisa de arquivos colocado após o mês / dia ao construir a string de pesquisa. REM / L (opcional) Lista todos os arquivos correspondentes ao padrão, mas não os exclui. REM / DEL (opcional) Exclui todos os arquivos que correspondem ao padrão. Exemplos REM REM: REM DeleteByDatePattern / M 3 "% WinDir% system32LogFiles" ex ?? ??. log / DEL REM Exclui todos os arquivos de log do IIS (Windows Server 2003), exceto os dois meses atuais e anteriores. REM DeleteByDatePattern / D 7 "D: Backup" - ???? - ?? - .zip / DEL REM Exclui todos os arquivos zip da pasta D: Backup, exceto na semana atual. REM O padrão de nome de arquivo assumido acima é "* -YYYY-MM-DD.zip" REM DeleteByDatePattern / M 0 "C:" * () * / L REM Imprime uma lista de todos os arquivos na unidade C que correspondem ao padrão: " * -MM- * "(onde MM é substituído por 01-12) REM DeleteByDatePattern / D 14" C: Logs "Log - ???? .txt REM Imprime uma lista de todos os padrões que seriam processados ​​pelo script. SETLOCAL EnableExtensions EnableDelayedExpansion REM Assume que as configurações de data / hora do Windows estão definidas para o formato 'DayOfWeek M / D / YYYY'. REM Se o seu formato é diferente, você precisará alterar as variáveis ​​abaixo para que elas se alinhem. FOR / F "tokens = 1,2,3,4 delims = /" %% A IN ('DATA / T') DO (SET Mês = %% B SET Dia = %% C SET Ano = %% D) SE / I % 1 == / M (SET Manter =% Mês% SET Max = 12) SE / I % 1 == / D (SET Manter =% Dia% SET Máx = 31 REM Trabalhando fora dos dias máximos do mês anterior SET / A PrevMonth =% Mês% -1 IF! PrevMonth! EQU 2 (AJUSTE MÁX = 28 REM anos bissexto… acrescente mais conforme necessário. IF / I% Ano% EQU 2012 DEFINIRMENTE = 29 IF / I% Ano EQU 2016 SET Máx = 29) IF / I! PrevMonth! EQU 4 SET Máx. = 30 IF / I! PrevMonth! EQU 6 AJUSTE MÁXIMO = 30 SE / I! PrevMonth! EQU 9 AJUSTE Máx. = 30 SE / I! PrevMonth! EQU 11 SET Máx = 30) SET Corrente =% Manter% SET / A Manter =% Manter% -% 2 + 1 REM Determina o intervalo a ser removido. SET / A RemoveHighStart =% atual% + 1 IF / I% Manter% LSS 1 (SET RemoveLow = 0 SET / A RemoveHighEnd =% Manter% +% Max% -1) ELSE (SET / A RemoveLow =% Manter% -1 SET RemoveHighEnd =% Max%) REM Processa tudo menos que a faixa baixa. FOR / L %% Z IN (1,1,% RemoveLow%) DO CALL: processo %% Z% 3% 4% 5% 6 REM Processa tudo maior que a faixa alta. FOR / L %% Z IN (% RemoverHighStart%, 1,% RemoverHighEnd%) FAZER CHAMADA: Processo %% Z% 3% 4% 5% 6 ENDLOCAL GOTO Finalizar: Processar Tecla SET = 0% 1 Tecla SET = Tecla%: ~ -2% SET Alvo = "% ~ 2% ~ 3% Chave %% ~ 4" ECHO Padrão Alvo:% Alvo% IF / I % 5 == / L DIR% Alvo% / B / S IF / I % 5 == / DEL DEL / F / S / Q% Alvo% GOTO Fim: Fim

    Automatizando o processo

    O comando FORFILES é nativo do Windows, no entanto, o script DeleteByDatePattern deve ser colocado em uma pasta definida em sua variável Path (como sua pasta Windows) para que possa ser chamada como se fosse um comando nativo. Uma vez feito isso, você pode criar uma tarefa agendada que é um único comando (se você só precisa excluir de um único local) ou um arquivo de lote (se você precisar excluir de vários locais) que é executado diariamente, semanalmente, mensalmente ou sempre.

    Mais uma coisa que você pode definir e esquecer.

    Links

    Baixar o script Delete By Date Pattern do Sysadmin Geek