Linux / Comando rmdir: eliminar directorios vacíos

rmdir es un comando que solo elimina directorios vacíos. Si quedan archivos o subdirectorios, fallará, por lo que actúa como un mecanismo de seguridad para prevenir la eliminación accidental de datos en situaciones donde no se necesita eliminación recursiva.

En este artículo se explica el uso básico, cómo eliminar también los directorios padres vacíos con -p, las causas de fallo de eliminación y la diferencia con rm -r.

¿Qué es el comando rmdir?

rmdir elimina un directorio únicamente si está vacío, incluidos los elementos ocultos. No sirve para archivos regulares. La eliminación depende, entre otras condiciones, de los permisos de escritura y acceso del directorio padre; también pueden intervenir listas de control de acceso (ACL), el bit de directorio restringido y políticas de seguridad. La lista de comandos de uso frecuente en Linux permite comparar esta operación con otras herramientas.

Sintaxis básica

rmdir [OPCIONES] DIRECTORIO ...

Si el nombre de archivo o ruta contiene espacios, se debe poner entre comillas, y los nombres que comienzan con un guion se deben especificar después de -- si es posible. Las opciones soportadas pueden variar según la distribución y la versión de GNU Coreutils, por lo que consulte la descripción del sistema actual con rmdir --help y man rmdir.

Uso básico de rmdir

Eliminar un directorio vacío

Se eliminará si no hay elementos en el directorio de destino.

rmdir old-cache

Eliminar varios directorios vacíos

Si se especifican varias rutas, se procesan en orden. Algunas pueden fallar, así que verifique el estado de salida y los mensajes.

rmdir empty-a empty-b empty-c

Eliminar hasta los directorios padre vacíos

-p elimina la ruta especificada y después elimina secuencialmente los padres vacíos. Por ejemplo, el siguiente comando intentará en el orden a/b/c, a/b, a.

rmdir -p a/b/c

Verificar el resultado de la eliminación de directorios vacíos

rmdir no genera mensajes al eliminar directorios vacíos. Aplique el siguiente ejemplo solo a objetos creados temporalmente.

mkdir empty-demo
rmdir empty-demo
test ! -e empty-demo
echo $?

La salida de ejemplo es 0. Esto significa que la condición de que la ruta no existiera en test era verdadera. Si hay archivos ocultos dentro del directorio, rmdir fallará, así que revise primero el contenido.

Opciones principales

Opciones Descripción
-p, --parents Elimina el objetivo y luego los directorios superiores vacíos de manera secuencial.
-v, --verbose Imprime mensajes para cada directorio que se procesa.
--ignore-fail-on-non-empty Ignora el fallo por contenido restante: puede devolver éxito aunque el directorio siga existiendo.

Las opciones largas facilitan entender su significado y también ayudan a revisar scripts. Sin embargo, en scripts donde la portabilidad es importante, primero verifique si el sistema objetivo soporta esas opciones de extensión GNU.

Ejemplos de uso práctico

Verificar si realmente está vacío

El ls genérico puede pasar por alto elementos ocultos. Si falla la eliminación, revise los elementos internos con ls -la o find.

ls -la old-cache
find old-cache -mindepth 1 -maxdepth 1 -print

Limpiar en el script solo cuando esté vacío

El ejemplo siguiente muestra un mensaje solo si rmdir elimina el directorio. Conservará un directorio con contenido. Sin embargo, 2>/dev/null oculta los diagnósticos, incluidos los de permisos, y este if sin rama else no propaga el estado fallido de rmdir. En una automatización que deba detectar fallos, conserve los mensajes y gestione el estado explícitamente.

if rmdir -- cache-dir 2>/dev/null; then
  printf '%s\n' 'Se eliminó el directorio de caché vacío.'
fi

Limpiar rutas largas vacías paso a paso

Usar -pv juntos facilita verificar hasta qué etapa se ha eliminado. Si hay rutas superiores que deben conservarse, elimínelas explícitamente en cada ruta en lugar de -p.

rmdir -pv build/tmp/session

Comparación de comandos relacionados con rmdir

Comando / método Rol principal Situaciones adecuadas
rmdir Eliminar solo directorios vacíos Cuando hay contenido y se debe conservar
rm -d Posible eliminar directorios vacíos Al manejar junto con archivos en el contexto de GNU rm
rm -r Eliminación recursiva incluyendo contenido Cuando se elimina intencionalmente todo el árbol
find -empty -delete Búsqueda y eliminación de elementos vacíos que cumplen con las condiciones Al organizar varias rutas vacías por regla

Precauciones al usar

Los archivos ocultos también son contenido

Si hay archivos ocultos como .keep o .gitignore, no se consideran directorios vacíos y no se eliminarán.

Verifique el rango de -p

Si se especifica una ruta profunda, puede eliminarse junto con padres vacíos más altos de lo esperado. Establezca claramente el límite de conservación.

No considere el fallo como un error en todos los casos

Que el directorio contenga datos hace que rmdir falle; ese resultado puede ser la protección esperada en vez de un problema que deba forzarse. Investigue la causa antes de decidir si continúa. Con --ignore-fail-on-non-empty, el éxito tampoco confirma por sí solo que se eliminó el directorio.

FAQ

¿Se puede eliminar un directorio que contiene archivos con rmdir?

No. rmdir solo elimina directorios vacíos. Para eliminar su contenido, verifique el alcance y use rm -r.

¿Por qué no se elimina aunque parezca vacío?

Podría ser debido a archivos ocultos, puntos de montaje o problemas de permisos. Verifique el contenido con ls -la y find.

¿Cómo eliminar de una vez incluso el directorio padre?

Use rmdir -p RUTA. Cada paso solo se elimina si está vacío.

¿Es rmdir más seguro que rm -r?

Es seguro en el sentido de que no elimina directorios que contengan contenido. Sin embargo, el principio de que se debe verificar si la ruta especificada es correcta sigue siendo el mismo.

Documentación oficial