¿Cómo elimino todos los directorios vacíos?

11

(en un sistema Linux)

Tengo un gran conjunto de subdirectorios anidados en un sistema de archivos. Me gustaría podar todas las rutas de directorio que no contienen ningún archivo.

En otras palabras, me gustaría eliminar todos los directorios donde no hay archivos en ese directorio o en cualquier subdirectorio de ese directorio de forma recursiva.

AndrewR
fuente

Respuestas:

15

Para todas las versiones de find

find -depth -type d -empty -exec rmdir {} \;

Si tienes una versión más nueva

 find -type d -empty -delete
Miguel
fuente
genial, no conocía la -deletebandera.
ansi_lumen
Yo tampoco. Aprendí algo nuevo. He escrito guiones antes, usando la recursividad para encontrar directorios vacíos. Esto simplifica enormemente esa tarea.
James
2
ya la bandera vacía realmente ayuda aquí. También funciona para encontrar archivos vacíos si no se incluye el de tipo D o simplemente utilizado type f
Mike
1

Puede que no sea la mejor solución, pero este script funciona:

#!/bin/sh

while true
do
    DIRS=`find . -xdev -type d -exec find {}  -maxdepth 0 -empty  \;`
    if [ -z "$DIRS" ]; then
        exit 0
    else
        echo $DIRS | xargs rmdir
    fi
done

(basado en parte en la respuesta a Listar todas las carpetas vacías )

AndrewR
fuente
1
Me acaba de ocurrir que este entra en un bucle infinito si no tiene permiso para eliminar cualquiera de los directorios vacíos, así que tenga la respuesta aceptada en lugar :)
AndrewR
0
for i in `find -type d -empty`; do rmdir $i; done
ansi_lumen
fuente
Cerca, pero sin cigarro. Falta el caso en el que eliminar un directorio hace que su padre se vacíe.
Simon Richter
Es verdad. Los haría finden una segunda carrera. Nunca tuve este caso en la vida real.
ansi_lumen