Avete mai provato ad eseguire “rm -rf” su una directory piena di tante sottodirectory e piccoli files, come può essere per esempio quella della cache di mod_pagespeed? L’operazione è drammaticamente lenta, in pratica perché cancellando ricorsivamente un albero di directory viene eseguito un fork per ogni file o directory da cancellare. Questa mattina ho voluto cercare una via diversa, e l’ho trovata: pensate, coinvolge rsync (ah, quanto lo adoro!).
Il ragionamento è un po’ contorto, ma i risultati sono stupefacenti. In pratica prima bisogna creare una directory vuota, poi bisogna usare questa directory vuota come sorgente per una sincronizzazione in cui i file nella destinazione vengono eliminati: dato che la sorgente è vuota riusciremo a svuotare la nostra directory con dei tempi che con un semplice “rm -rf” ci possiamo solo sognare. Si vedano i benchmark.
I comandi da dare:
mkdir dir_vuota
rsync -av --delete dir_vuota/ dir_da_svuotare/