Elenca prima le directory profondamente annidate.
find . -depth -type d -exec rmdir {} \; 2>/dev/null
(Si noti che il reindirizzamento si applica al find
comando nel suo insieme, non solo a rmdir
. Il reindirizzamento solo per rmdir
causerebbe un rallentamento significativo poiché sarebbe necessario invocare una shell intermedia.)
È possibile evitare l'esecuzione rmdir
su directory non vuote passando il -empty
predicato da trovare. GNU find verifica la directory quando sta per eseguire il comando, quindi verranno prese le directory che sono state appena svuotate.
find . -depth -type d -empty -exec rmdir {} \;
Un altro modo per accelerare sarebbe raggruppare le rmdir
invocazioni. È probabile che entrambi siano notevolmente più veloci dell'originale, specialmente con Cygwin. Non mi aspetto molta differenza tra questi due.
find . -depth -type d -print0 | xargs -0 rmdir 2>/dev/null
find . -depth -type d -exec rmdir {} + 2>/dev/null
Quale metodo è più veloce dipende da quante directory non vuote hai. Non puoi combinare -empty
con i metodi per raggruppare le invocazioni, perché le directory che contengono solo directory vuote non sono vuote quando le find
guardano.
Un altro metodo sarebbe quello di eseguire più passaggi. La maggiore rapidità dipende da molte cose, incluso se l'intera gerarchia di directory può rimanere nella cache del disco tra le find
esecuzioni.
while [ -n "$(find . -depth -type d -empty -print -exec rmdir {} +)" ]; do :; done
In alternativa, usa zsh. Il qualificatore glob F
corrisponde a directory non vuote, quindi /^F
corrisponde a directory vuote. Le directory che contengono solo directory vuote non possono essere abbinate così facilmente.
while rmdir **/*(/N^F); do :; done
(Questo termina quando rmdir
riceve una riga di comando vuota.)