Tmpwatch para Windows

Se você nunca usou linux, não sabe o poder de um simples comando: tmpwatch (o link leva para as páginas do manual, em inglês!).

Basicamente ele é usado para remover arquivos de diretórios que tenham uma certa “idade”, por exemplo, mais de 1 dia, ou algumas horas.

Um uso bem interessante para ele é esvaziar diretórios para arquivos que não devam permanecer lá por muito tempo ( a pasta compartilhada de documentos escaneados numa empresa foi o que gerou essa necessidade!).

O exemplo abaixo está configurado para remover tudo que for mais velho do que 30 minutos (e é portanto UM GRANDE PERIGO!!) no diretório que for fornecido.  Como bom script ele impede que você não use o parametro (o diretório) necessário! 😉

Eis aqui o PowerShell script que emula o tmpwatch:

#
# Salvar como: ApagaMais30min.ps1
#
# Script para remover arquivos (e diretorios opcionalmente) mais antigos que certo tempo emulando o tmpwatch do linux.
# Criador: Jáder Marasca   2010-aug-03
#
# Para mudar para Dias, o parametro é AddDays (Dã!)
# Note que ele gera log em um arquivo (d:\oldfiles.txt no original)
#

Param([string]$Diretorio);
Write-Host “Diretorio a Apagar: $Diretorio”;
if ( $Diretorio.Length -eq 0 ) {Write-Host “Use assim: ApagaMais30min.ps1 DIRETORIO_A_VERIFICAR”;exit;}
if ( !(test-path “$Diretorio” -pathtype container)) {Write-Host “O Diretório ‘$Diretorio’ NÃO FOI LOCALIZADO ou NÃO EXISTE. Verifique!! “;exit;}
# Nao remove os diretorios vazios
dir $Diretorio -recurse | where {!$_.PsIsContainer -AND $_.lastWriteTime -lt (Get-Date).AddMinutes(-30) } | select LastWriteTime,@{n=”Path”;e={convert-path $_.PSPath}} | tee d:\oldFiles.txt | Remove-Item -force
# Remove também diretorios
# dir $Diretorio -recurse | where {$_.lastWriteTime -lt (Get-Date).AddMinutes(-30) } | select LastWriteTime,@{n=”Path”;e={convert-path $_.PSPath}} | tee d:\oldFiles.txt | Remove-Item -force

A base deste script veio do site StackOverflow neste artigo que eu adaptei e melhorei (segundo minha POUCO modesta opinião!) 🙂