Enumere los directorios profundamente anidados primero.
find . -depth -type d -exec rmdir {} \; 2>/dev/null
(Tenga en cuenta que la redirección se aplica al find
comando como un todo, no solo a rmdir
. Redirigir solo para rmdir
causaría una desaceleración significativa ya que necesitaría invocar un shell intermedio).
Puede evitar ejecutarse rmdir
en directorios no vacíos pasando el -empty
predicado para buscar. GNU find prueba el directorio cuando está a punto de ejecutar el comando, por lo que se recogerán los directorios que se acaban de vaciar.
find . -depth -type d -empty -exec rmdir {} \;
Otra forma de acelerar sería agrupar las rmdir
invocaciones. Es probable que ambos sean notablemente más rápidos que el original, especialmente bajo Cygwin. No espero mucha diferencia entre estos dos.
find . -depth -type d -print0 | xargs -0 rmdir 2>/dev/null
find . -depth -type d -exec rmdir {} + 2>/dev/null
El método más rápido depende de cuántos directorios no vacíos tenga. No puede combinarse -empty
con métodos para agrupar invocaciones, porque los directorios que solo contienen directorios vacíos no están vacíos cuando los find
mira.
Otro método sería ejecutar múltiples pases. Si esto es más rápido depende de muchas cosas, incluso si toda la jerarquía de directorios puede permanecer en el caché del disco entre find
ejecuciones.
while [ -n "$(find . -depth -type d -empty -print -exec rmdir {} +)" ]; do :; done
Alternativamente, use zsh. El calificador glob F
coincide con directorios no vacíos, por lo que /^F
coincide con directorios vacíos. Los directorios que solo contienen directorios vacíos no pueden coincidir tan fácilmente.
while rmdir **/*(/N^F); do :; done
(Esto termina cuando rmdir
recibe una línea de comando vacía).