11/01/2008

Eliminare i file più vecchi di un certo numero di giorni

A cura di Efran Cobisi


Come molti di voi ben sanno, la maggior parte degli applicativi server memorizza i propri log degli eventi all'interno del file system, tipicamente utilizzando un file diverso al giorno (oppure all'ora). IIS, ad esempio, memorizza di default i propri log all'interno di un file, diverso ogni giorno, nella cartella %SystemRoot%\system32\Logfiles.
Chi svolge un'attività di manutenzione di su file di questo tipo spesso ha la necessità di spostare (oppure di rimuovere, nel caso in cui le informazioni vengano analizzate e memorizzate su supporti alternativi) i file in base alla data a cui risale l'ultima scrittura sul file.
Recuperare i file in base a criteri di questo tipo è davvero molto semplice con PowerShell. Ecco, ad esempio, come recuperare i file più vecchi di trenta giorni dalla cartella corrente:

Get-ChildItem |
	Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) }

Ed ecco come, mettendo in pipe un ulteriore cmdlet, sia possibile spostare gli elementi corrispondenti al criterio nella cartella W:\Archive:

Get-ChildItem |
	Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
	Move-Item -Destination 'W:\Archive' -WhatIf

Si noti la presenza del parametro -WhatIf del cmdlet Move-Item, che si limita a riportare a video la descrizione dell'effetto del comando, senza realmente eseguirlo.

Commenti


24/04/2009 11.17
maltra: Cartelle di rete
Ciao vorrei applicare questo script a cartelle di rete, cioè una cartella condivisa verificare i file ed eliminare i più vecchi,
Grazie
28/04/2009 7.22
efran.cobisi: RE: Cartelle di rete
Gli share di rete sono disponibili in PowerShell tramite i tradizionali UNC, del tipo: \\server\share

Ciao!
20/10/2010 12.33
elvisbac: Eliminare i file
come faccio invece ad eliminare i file senza spostarli in un'altra cartella?
21/10/2010 10.08
elvisbac: Eliminare i file 2
Get-ChildItem | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item -WhatIf

Scusami per la domanda banale, ma ho appena iniziato con PowerShell.
01/07/2011 22.30
shellato: eliminare i file 3
se volessi invece puntare ad una directory di una macchina remota ?
23/12/2011 16.09
elvisbac: Eliminare i File 3
Set-Location -Path C:\files\

Get-ChildItem | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item -include *.pdf

la parte -include*.pdf non funziona, infatti vengono cancellate anche le sottocartelle più vecchie di 30 giorni.

Come si puo' fare per cancellare solo i pdf o non far cancellare le sottocartelle?

PS: quando cancello un file viene sempre richiesta una conferma di cancellazione, è possibile dare una risposta automaticamente?

Grazie in anticipo
23/12/2011 16.17
efran.cobisi: Per le domande, per favore, usa il forum
Ciao,

è difficile che la tua domanda venga letta se la posti come commento qui dentro. Ti consiglio, piuttosto, di creare una nuova discussione all'interno del forum.

A presto!


Cobisi EmailVerify.NET is a Microsoft .NET software component that validates email addresses. valid email