Cancellare una montagna di file

Abbiamo scoperto un comando che permette di cancellare centinaia di migliaia di file da una directory linux, quando rm proprio non ce la fa.

delete
Foto di Miguel Á. Padriñán da Pexels

Vi è mai capitato di ritrovarvi in una directory linux con un numero di file talmente grande da non riuscire a cancellarli? Non è una cosa che capita tanto di frequente, di solito succede senza colpa dell’operatore o dell’utente. Nel nostro caso capita relativamente spesso in un server che ospita un sito con moltissimo traffico, la directory in questione è quella che contiene i file di sessione php ovvero /var/lib/php/sessions. Ogni tanto il prode apache perde i colpi e per qualche motivo non riesce a fare pulizia dei file delle sessioni, in questo caso succede che dopo un po’ il sistema comincia ad andare in crisi e l’unica via è una pulizia manuale.
Attenzione: stiamo parlando di centinaia di migliaia, milioni di file, non è così facile mettere in crisi linux. Bene in questo caso il comando rm non ce la fa:

/bin/rm: Argument list too long.

In questi casi si può ricorrere a un trucchetto ovvero

find . -type f -exec rm -v {} \;

ma anche questa soluzione nel nostro caso non era ottimale: avendo a che fare con centinaia di migliaia di file dopo una notte intere stava ancora finendo di triturare. Serviva qualcosa di più veloce e così abbiamo trovato un’opzione forse non molto conosciuta e che può essere utile anche ad altri: il comando find ha inclusa l’opzione -delete ed è mostruosamente più veloce. Questo il comando che abbiamo utilizzato:

find . -type f -print -delete

L’opzione -print è ovviamente facoltativa, se volete guadagnare ancora qualcosa in termini di velocità e non vi interessa sapere cosa sta succedendo potete farne a meno. Il risultato è che in pochi minuti in questo modo siamo riusciti a ripulire la directory.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Torna in alto