¿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.

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

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 )


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.