¿Por qué obtengo "Directorio no vacío" cuando intento eliminar un directorio vacío?

37

Tengo este directorio vacío, pero sigo recibiendo el siguiente mensaje de error:

Cannot remove test: Directory not empty

Sé que esta pregunta se ha hecho muchas veces, pero ninguna de ellas ayudó.

Traté ls -lade asegurarme de que no hubiera archivos ocultos, y parece que no hay: ingrese la descripción de la imagen aquí

Lo intenté sudo rmdir testtan bien como sudo rm -rf test, y simplemente no sé qué está mal.

Leí que podría ser un problema con el sistema de archivos, pero no tengo idea de cómo solucionaría eso.

rbrick
fuente
Probarsudo fsck /
ike
2
¿Es un directorio normal o un punto de montaje? Si este es un punto de montaje, debe desmontarse antes de eliminarlo. Si es un directorio normal, en algún momento puede haber algunos identificadores abiertos que causen este problema. Reinicie su máquina una vez e intente eliminarla.
vembutech
@rbrick ¿ testEs su nombre de usuario de inicio de sesión? ¿Cuál es la salida de echo $USER? y qué echo $HOME?
αғsнιη
1
Estoy confundido, ¿por qué el usuario no tiene permisos de ejecución en el directorio, pero el grupo sí?
Julian Stirling
2
posible duplicado de ¿Cómo eliminar un directorio no vacío en la Terminal?
Radu Rădeanu

Respuestas:

36

Tuve el mismo problema en un disco duro externo, intenté de muchas maneras usando la línea de comando, pero fallé cada vez. Eso fue lo que funcionó para mí:

  1. Haga clic derecho en la carpeta
  2. Mover a la papelera
  3. Papelera vacía

Sí, es una tontería, pero funcionó para mí (realmente no sé cómo y por qué, pero la maldita carpeta ya no existe)

Marco Ottina
fuente
Tengo el mismo problema y su respuesta funciona. No estoy muy seguro de lo que sucedió, y por qué "-rf" no pudo eliminar una carpeta no vacía.
artm
3
¿Qué acaba de pasar aquí? ¿Por qué funcionó?
Sahil Arora
¿Que pasó? Honestamente, no lo se. Tal vez, el archivo de la carpeta estaba dañado por alguna razón: un indicador como "está vacío" o el contador de archivos como "cuántos archivos dentro" se ha establecido en un valor erróneo. A veces, errores como este pueden ser causados ​​por daños en el disco duro. ¿Por qué funcionó? No sé cómo se implementan los comandos (piense en C), pero supongo que comprueban esos indicadores y contadores antes de actuar (es decir, si el contador de archivos> 0, entonces "error: directorio no está vacío" y aborta), mientras vacía el basura elimina directamente la carpeta y todos sus archivos y subcarpetas sin ningún tipo de verificación.
Marco Ottina
Tal vez, eliminar una carpeta a través de la línea de comando requiere algunas condiciones, como el vacío de la carpeta, (porque eliminar el nodo de la carpeta del sistema de archivos elimina solo ese nodo de enlace único y requiere que la carpeta esté vacía para que ningún otro nodo de archivo sea "olvidado" "a través del sistema de archivos debido a la pérdida del enlace intermedio hacia ellos, representado por la carpeta) ... y al eliminar una carpeta haciendo clic con el botón derecho -> eliminar o vaciar la papelera se elimina la carpeta Y todos los archivos y subcarpetas de forma recursiva, sin importar las banderas, contadores y cosas así (por lo tanto, no se realizan controles)
Marco Ottina
1
En mi caso, el subdirectorio en cuestión estaba en una carpeta que se compartió desde mi Mac a una máquina virtual Linux, y estaba tratando de eliminar la carpeta desde el lado de la máquina virtual Linux. Parece que el lado de Mac estaba sosteniendo algunas carpetas. Hacerlo rm -rfdesde el lado de Mac funcionó.
MindJuice
5

Tengo instalado Win 10 + ubuntu dual system. Y ambos sistemas comparten las particiones de Windows.

Recientemente, también me encontré sin poder eliminar carpetas vacías en esas particiones en ubuntu. No puedo encontrar una solución para resolverlo en Linux.

Sin embargo, después de cambiar a Windows y ejecutar

chkdsk

vía cmdpara el disco de destino. Algunos errores verificados. y luego corro

chkdsk /F

para reparar el error del disco.

Después de que termine, puedo eliminar esas carpetas ahora.

e-cloud
fuente
2
Este método me funciona. Creo que también es importante tener en cuenta que las particiones compartidas están formateadas con NTFS y que probablemente estén dañadas.
krismath
4

Puede eliminarlo escribiendo sudo rm -rf {dir_name}. El directorio podría haber sido configurado para permiso de solo lectura. Espero que el comando dado pueda eliminar la carpeta.

Glotón
fuente
Me sale de Directory not emptytodos modos. Parece extraño, así que grabé mi pantalla para demostrarlo.
naXa
Ese comando en la respuesta funciona incluso si el directorio tiene contenido y también con subdirectorios.
Wolverine
Este extraño comportamiento fue causado por errores en la partición NTFS. resuelto con chkdsk /F.
naXa
4

Tuve el mismo problema al no poder eliminar el directorio ya que no está vacío.

Esta secuencia de operaciones funcionó para mí.

  1. Desde la línea de comando primero

    sudo rmdir  --ignore-fail-on-non-empty folder-name-to-be-deleted
    

El comando anterior ayuda a ubuntu a ignorar el directorio que no está vacío.

  1. Luego solo ve a la carpeta y Shift + Supr. Eso es todo.
Amit
fuente
3

Solución GUI

  1. Mueva o corte y pegue la carpeta a la carpeta de la papelera
  2. vaciar la basura

se hace.

Solución de línea de comando

sudo mv folder_error/ .local/share/Trash

puede borrar con trash-cli: trash-empty o

sudo rm -fr ~/.local/share/Trash/*
Kadir Y.
fuente
1
Creo que la solución de línea de comando aquí es en realidad una solución general. Mueva la carpeta vacía a otra ubicación y retírela una vez que se haya movido. Por ejemplo, algo como esto mkdir a ; mv test a/ ; rm -rf a/test ; rm -rf a. Un enfoque como ese funcionó para mí (aunque no tengo idea de por qué lo haría), y no necesitaba acceso root.
Jake Fisher
2

Si el directorio es parte de un sistema de archivos montado con CIFS (también conocido como samba) y contiene un archivo que es un enlace simbólico roto, lsno se menciona ese archivo. ( Observo este error en un cliente CIFS que ejecuta 14.04.2 LTS y un servidor que ejecuta 12.04.5 LTS).

Entonces el directorio no está vacío , pero (sobre CIFS) no tiene forma de ver eso. El archivo solo se puede ver y, por lo tanto, solo se puede eliminar mediante un comando que se ejecuta en el servidor de archivos que aloja ese sistema de archivos.

Camille Goudeseune
fuente
2

Si está utilizando btrfs, posiblemente sea un directorio vacío con un i_size distinto de cero. Puede verificar si este es el caso con:

stat -c %s test

El i_size de una carpeta vacía en btrfs debe ser cero. En mi caso, obtuve 6160 con ~/.config/chromium/Default.

La solución sugerida es desmontar el sistema de archivos, ejecutar btrfs checkpara confirmar el problema y buscar otros directorios problemáticos, y finalmente ejecutar btrfs check --repairpara solucionarlo. Sin embargo, esta operación es arriesgada, por lo que es una buena idea hacer una copia de seguridad de los archivos primero.

Fuente: Btrfs Problema Preguntas frecuentes

wzhd
fuente
1

Tuve el mismo problema en Ubuntu 16.04 y lo solucioné:

  1. vaciar la carpeta de basura
  2. reinicio

Abrir y cerrar el administrador de archivos no sirvió, solo reiniciar funcionó.

valle
fuente
0

prueba este comando:

sudo lsof | grep deleted 

Compruebe en la lista si su directorio todavía está en uso. :RE

Si es así, detenga el servicio y podrá eliminar el directorio.

ashwin2011
fuente
Obviamente, el directorio no aparecerá en la lista de descriptores de archivos abiertos y eliminados si no se puede eliminar. ; -]
David Foerster
0

Este problema aparece cuando esas carpetas o archivos no se copian por completo. Es error de entrada / salida. Intenté eliminar con Shift+ Delo mediante comandos, pero estos no funcionaron. Intenté hacer clic derecho y "Mover a la papelera" y funcionó.

lhodeniz
fuente