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.




