Extraño directorio vacío que sólo se puede eliminar con rmdir /s

Extraño directorio vacío que sólo se puede eliminar con rmdir /s

De alguna manera terminé con un directorio vacío (creado hace algunos meses con NodeJS como parte de un script que ejecuté) que no se puede eliminar con un archivo rmdir. Puedo copiar y pegar el directorio tantas veces como quiera e incluso las copias seguirán siendo imborrables con rmdir:

C:\testing>dir
 Volume in drive C is Local Disk
 Volume Serial Number is 8830-C25A

 Directory of C:\testing

20/07/2020  04:47 PM    <DIR>          .
20/07/2020  04:47 PM    <DIR>          ..
20/07/2020  01:25 PM    <DIR>          test
               0 File(s)              0 bytes
               3 Dir(s)  43,126,059,008 bytes free

C:\testing>rmdir test
Access is denied.

Eso está en el mensaje cmd del administrador, e incluso configuré todos los permisos en el directorio en Full control:

ingrese la descripción de la imagen aquí

Según todos los indicios, el directorio está totalmente vacío; Activé los archivos ocultos y del sistema en el Explorador y no veo subdirectorios ni archivos, y dir /atampoco muestra nada:

C:\testing\test>dir /a
 Volume in drive C is Local Disk
 Volume Serial Number is 8830-C25A

 Directory of C:\testing\test

20/07/2020  01:25 PM    <DIR>          .
20/07/2020  01:25 PM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  43,123,294,208 bytes free

Hacer attriben el directorio no muestra nada:

C:\testing\test>attrib
File not found - C:\testing\test\*.*

La otra cosa extraña es que me avisa Access is deniedcuando lo intento rmdiren lugar de hacerlo The directory is not empty.

También consideré que algún programa puede tener un identificador abierto para el directorio (por muy improbable que sea después de copiar y pegar desde el original). Bueno, después de comprobar todo lo que se me ocurrió (LockHunter, búsqueda de identificadores de Process Explorer, búsqueda de identificadores de Resource Monitor y el programa Handle de Sysinternals) no pude ver ningún identificador abierto en ninguna parte.

Entonces, en este punto, parece que algo está pasando, ¿verdad? Bueno, ¿qué es?en realidadLo extraño es que si lo hago rmdir /s test(eliminación recursiva), se elimina muy bien:

C:\testing>rmdir /s test
test, Are you sure (Y/N)? y

C:\testing>dir
 Volume in drive C is Local Disk
 Volume Serial Number is 8830-C25A

 Directory of C:\testing

20/07/2020  04:58 PM    <DIR>          .
20/07/2020  04:58 PM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  43,120,893,952 bytes free

Esto implica que en realidad hay algo dentro test. ¿Qué podría ser? Tengo mucha curiosidad, porque nada de lo que he hecho hasta ahora me ha mostrado algo útil. Simplemente no puedo entender qué está causando rmdir testel error en este directorio en particular (o en cualquier copia del mismo).

Entonces mi pregunta oficial: ¿Qué está causando este comportamiento extraño?

Respuesta1

Gracias al excelente trabajo de @LPChip en los comentarios creo que ahora tengo mi respuesta.

Al hacer clic attriben la carpeta misma ( attrib test), se reveló que la carpeta tenía un atributo de solo lectura:

C:\testing>attrib test
     R               C:\testing\test

Eliminar el atributo de solo lectura permite eliminar la carpeta:

C:\testing>attrib -r test

C:\testing>rmdir test

C:\testing>dir
 Volume in drive C is Local Disk
 Volume Serial Number is 8830-C25A

 Directory of C:\testing

23/07/2020  09:03 AM    <DIR>          .
23/07/2020  09:03 AM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  43,965,960,192 bytes free

Crear una nueva carpeta y agregar el atributo de solo lectura replica el problema exactamente:

C:\testing>md test2

C:\testing>attrib +r test2

C:\testing>rmdir test2
Access is denied.

Eso es lo que impidió rmdireliminar la carpeta, pero quedan dos preguntas: 1) ¿Por qué funciona rmdir /scuando rmdirno, y 2) por qué cambiar la casilla de solo lectura en el diálogo de propiedades no tiene ningún efecto aparente?

Investigué un poco más yaprendióque el diálogo de propiedades de una carpeta en Windows no le permite configurar el atributo de solo lectura de la carpeta en sí, solo su contenido. Anteriormente asumí el texto."Solo se aplica a archivos en la carpeta"significaba que la configuración del estado "mixto" solo se aplicaría a los contenidos, pero "activado" se aplicaría a todo (no lo pensé bien), pero en realidad significa que si lo configura en el estado "encendido" o "apagado" aplicará el estado elegido únicamente al contenido, y el estado "mixto" simplemente dice "dejar todo como está".

ingrese la descripción de la imagen aquí

Eso explica el comportamiento confuso que estaba viendo con el diálogo de propiedades, pero no explica por qué rmdirdice Access is deniedpero rmdir /sfunciona. Bueno... no lo sé. Podría ser una cuestión de compatibilidad con versiones anteriores, una cuestión de compatibilidad con Unix, un error, una decisión de diseño intencional ( /sdespués de todo, el uso tiene un mensaje "¿está seguro?"). No puedo encontrar ninguna referencia a este comportamiento. Si alguien tiene más información, hágamelo saber y la agregaré a la respuesta.

información relacionada