Soluzioni tecniche

PowerShell: cancellare i file più vecchi di 30 giorni con una riga di codice

03 Marzo 2015
Capita di avere necessità di cancellare tutti i file più vecchi di una determinata data, magari da un’intera struttura di cartelle.
Cercando online, si trovano decine e decine di esempi di script, procedure e utility adatte allo scopo.

Con Windows PowerShell, però, possiamo farlo con una sola riga di codice.


Windows PowerShell


Poniamo di voler cancellare i file più vecchi di 30 giorni dalla cartella C:UsersUtenteDocumenti.
Iniziamo ad aprire il prompt di PowerShell come amministratore (in modo da evitare errori di accesso negato) e digitiamo (senza andare a capo):

dir “C:UsersUtenteDocumenti” –recurse Attributes !D+!S | where { ((get-date)-$_.creationTime).days -gt 30 } | remove-item –force -recurse

Premiamo Invio e il gioco è fatto.


Se hai ancora un po’ di tempo, analizziamo il comando:

dir “C:UsersUtenteDocumenti” –recurse

Sembra un normale comando dir da command prompt, vero?
In realtà PowerShell usa dir come alias del comando Get-ChildItem, che permette di usare molti parametri, come –recurse, che rende possibile iterare in tutte le sottocartelle. Il parametro -Attributes invece permette di includere e/o escludere oggetti a seconda degli attributi: in questo caso escludiamo (!) le (D)irectory e i file di (S)istema. Comodo, no?

Un altro parametro utile è –exclude, che ci permette di escludere dal filtro cartelle o file basandosi su nome nome o wildcard.


| (pipe)
Permette di eseguire un comando passandogli in input l’output del comando precedente.

where { ((get-date)-$_.creationTime).days -gt 30 }
L’output del comando dir viene quindi passato all’istruzione where, che esegue il comando Get-Date su di esso e restituisce solo i file con data di creazione (creationTime) più vecchia di 30 giorni (gt sta per "greater than", ossia “maggiore stretto”; se volessimo ottenere “maggiore o uguale”, dovremmo usare ge, ossia "greater or equal").

| (pipe)
Di nuovo prendiamo l’output del comando precedente e lo passiamo al successivo.

remove-item –force –recurse
In questo esempio, vogliamo cancellare i file restituiti dai filtri precedenti.

Usiamo quindi il comando Remove-Item, passandogli il parametro –force per forzare la cancellazione di file bloccati; specifichiamo poi il parametro per evitare di avere richieste di conferma per ogni file da cancellare nelle cartelle nidificate.

Potremmo ovviamente eseguire altri comandi su questi file, ad esempio spostarli in un altro percorso, usando il comando Move-Item.

Autore
Furio Borsi
Si appassiona al mondo digitale fin da bambino, con il glorioso Commodore 64, sul quale si diverte a scrivere semplici programmi in Basic e modificare giochi. Nel 1990 riceve in regalo il suo primo PC (i386), seguito un paio d'anni dopo da un i486dx. In questi anni affina le sue attitudini al problem solving, scassando hardware e software e divertendosi a rimetterlo a posto. ;) Diventa così "quello che se ne capisce" per i suoi familiari e amici, arrivando a collaborare con alcuni studi professionali per la gestione del parco macchine e dei server Windows. Finito il liceo, studia DAMS con indirizzo multimediale a Bologna e Imperia. Nel 2002, dopo un anno sabbatico a Londra, lavora come sviluppatore junior in un'azienda che produce software per database territoriali in ambito Pubblica Amministrazione. In questo periodo si avvicina con passione a problematiche sistemistiche e di network management su reti estese. Nel 2007 entra a far parte dello staff di Achab, per cui si occupa di formazione e supporto, in particolare riguardo a Kaseya, e gestione del parco macchine e della rete.
Commenti (4)

Ciao Furio, per la cancellazione delle cartelle e file contemporaneamente quale è il comando ?
Grazie
Antonio

Anonimo,

Ciao Antonio, basta togliere il parametro "!D", che appunto indica di saltare ("!") le cartelle o directory ("D"). Attento che però, visto che alcuni file potrebbero restare nei percorsi, alcune cancellazioni di cartella potrebbero fallire (o peggio potresti cancellare oggetti che non intendevi). Ciao!

Furio Borsi,

Ciao Stefano,

non allarmarti: il lucchetto sull’icona di file e cartelle non presuppone un accesso al pc da parte di terzi, ma solo un’impostazione dei permessi non corretta: in particolare, accesso permesso ad un singolo utente.
Per risolvere, basta modificare i permessi sulla cartella in modo da mettere Everyone in sola lettura. Se non riuscissi a fare la modifica da interfaccia, puoi servirti di un’utility come SubinACL (https://www.achab.it/achab.cfm/it/blog/achablog/il-subinacl-e-il-ripristino-delle-autorizzazioni) o simili. Fammi sapere se hai problemi o riesci a risolvere. Buon proseguimento!

Furio Borsi,

Ciao non riesco cancellare i file temnporanei internet (HANNO IL LUCCHETTO BLOCCATO) da pulizia disco….. ho provato con powershel… ma non mi ha datto nessuna soluzione …come posso fare??
credo che qualcuno mi abbia messo il pc sotto controllo
Grazie
Stefano

stefano zucca,

Lascia un commento

Il tuo indirizzo e-mail non verrà pubblicato, lo utilizzeremo solamente per inviarti la notifica della pubblicazione del tuo commento. Ti informiamo che tutti i commenti sono soggetti a moderazione da parte del nostro staff.