¿Por qué no es posible nombrar una carpeta "._." En Windows 7?

74

Acabo de notar que no es posible nombrar una carpeta ._., sino que se nombra ._. A veces, desaparece justo después de nombrarlo, pero vuelve a aparecer después de actualizar la vista. Windows parece tener un problema con los puntos al final de un nombre de archivo, ¿por qué es esto?

Negro
fuente
21
Vale la pena señalar que se topó con el "truco" para iniciar un nombre de archivo con un .en Windows.
jpmc26
8
@ThisNameBetterBeAvailable Sin probar, pero cd -- -_-posiblemente funcione. El --es un marcador común de "fin de opciones".
TripeHound
13
@ThisNameBetterBeAvailable No, --por sí solo significa " este es el final de las opciones, trate cualquier cosa que comience -como un valor literal ". Acabo de probar: mkdir -- -_-y cd -- -_-funciona como esperaba.
TripeHound
2
Alternativamente, ./-_-debería funcionar también.
glglgl
55
@Alexander En Linux, ya que parece ser a donde fueron los comentarios, ya que cd "-_-"el shell usa las comillas para agruparlas pero no las trata como parte del argumento; se equivoca coninvalid option
Izkata

Respuestas:

123

Windows normalmente requiere que los archivos no tengan extensión o una extensión que tenga al menos un carácter de largo; no es genial con extensiones de longitud cero, es decir, nombres de archivo que terminan en .. Las carpetas también pueden tener extensiones, por lo tanto, Windows no permite que sus nombres terminen con a .. Fuente, del artículo que DavidPostill enlazó :

Use un punto para separar el nombre del archivo base de la extensión en el nombre de un directorio o archivo .

(El énfasis es mío.) Si intenta finalizar un archivo o directorio nombrado con un punto, Windows simplemente asume que no quería una extensión y, por lo tanto, la elimina, incluso si la crea con mdun símbolo del sistema.

¡Zona peligrosa! Si desea que termine directamente el nombre de una carpeta ., deberá usar la secuencia de anulación de nombre sin procesar mágico de \\?\. En un símbolo del sistema, md \\?\C:\path\to\container\._.creará una carpeta llamada ._., pero muchos programas tendrán problemas, incluso Explorer:

._.  problemas

Dicho directorio solo se puede eliminar rdseguido de su \\?\nombre o renombrado con su nombre corto (8.3, dir /x).

Ben N
fuente
1
Gracias por tu respuesta detallada! :) Creo que esta sería una carpeta perfecta para ocultar cosas secretas como contraseñas dentro de ella, porque solo puedes abrir la carpeta si cambias el nombre primero, y no todos saben cómo cambiarle el nombre.
Negro
19
@EdwardBlack no detendría a nadie que pudiera leer el intercambio de pila (y, por lo tanto, ni siquiera proporcionaría seguridad contra el hipotético hermano pequeño). El nombre dado por lo dir /xhace bastante fácil, y hay otras veces que este nombre es útil.
Chris H
11
FWIW, las herramientas de línea de comandos de Cygwin también pueden crear (y manipular) dichos directorios en Windows 7, sin usar una secuencia mágica.
Steve Jessop
44
@EdwardBlack Como Chris H mencionó, no es muy secreto, por lo que no debe almacenar nada particularmente importante en dicha carpeta. Además, el secreto y la protección digital es un problema que se ha resuelto muchas veces. Puede usar cualquier cantidad de métodos y programas de cifrado para mantener las cosas seguras sin depender de nombres oscuros de carpetas.
Kris Harper
3
Nitpick: Al menos en los 8,3 días (no he investigado lo que está escrito en el disco en NTFS), el período nunca se escribió en el disco en primer lugar. El nombre se dividió en nombre y extensión, se almacenaron por separado. Al leerlo, tomó el nombre y, si había una extensión, agregó el punto y la extensión al nombre. Por lo tanto, no había forma de expresar ._. en la estructura del directorio, por supuesto, perdiste el punto final.
Loren Pechtel
22

¿Windows parece tener un problema con los puntos al final de un nombre de archivo? ¿Por qué es esto?

No termine el nombre de un archivo o directorio con un espacio o punto. Aunque el sistema de archivos subyacente puede admitir dichos nombres, el shell de Windows y la interfaz de usuario no lo hacen.

El enlace de origen a continuación contiene más detalles sobre las reglas para nombrar.

Archivos de nombres de origen , rutas y espacios de nombres

DavidPostill
fuente
55
Esto todavía me suena como un error.
ralu
@ralu Si se trata de un error, MS parece ser totalmente poco interesante para solucionarlo. Esas restricciones han estado allí desde Windows XP (si no antes).
DavidPostill
¿Windows XP? Mi conjetura es que estas restricciones tienen sus raíces en MS-DOS 0.x - solicitemos al Sr. Gates que aclare el problema ...
Christian Severin
17

No es un error Es por diseño para evitar problemas de compatibilidad.
Es un remanente de los viejos tiempos de DOS.

Los sistemas de archivos FAT12 (disquete) y FAT16 (FAT16 antes del soporte de nombre de archivo largo introducido en Windows 95) solo tenían nombres de archivo almacenados en 11 bytes:
8 bytes para el nombre, 3 para la extensión. El "punto" entre el nombre y la extensión ni siquiera se almacenó. Fue implícito y se agregó automáticamente para fines de visualización.
Los directorios no tenían extensiones en absoluto. En cambio, los 3 bytes para la extensión se rellenaron con caracteres "$" (que eran ilegales en nombres reales).
Debido a que Windows todavía es compatible con este Explorer y muchos otros componentes de Windows silenciosamente, desaparece el período final para evitar la creación de problemas de compatibilidad.
Como han dicho otros, puede manejar tales carpetas utilizando la semántica RAW (\\? \ Prefijo antes del nombre de ruta absoluto).
Detrás de escena, NTFS y los sistemas de archivos de red no tienen ningún problema con dichos archivos y carpetas. Es solo un caso de Explorer tratando de evitar que el usuario cree algo que pueda causar problemas para otro software.

(De hecho, también hay otros sobrantes:
los nombres de archivo como COM, COM1, COM2, AUX, PRN, LPT, LPT1, LPT2, LPT3, CON pueden causar problemas similares en los que Explorer y muchas otras partes de Windows se confunden porque estos nombres son nombres "reservados" que también datan de la era de DOS).

Tonny
fuente
3
Para cualquier otro lector que inicialmente se mostró incrédulo con respecto al punto que no se almacena: eso es correcto para CP / M y todas las versiones de FAT, incluidas FAT16 y FAT32 .
Ben N
1
Recuerdo algún programa antiguo de DOS (que se ejecuta en DOS real, probablemente usando las funciones INT13 directamente), lo que me dio una verdadera pena una vez al lograr crear de alguna manera un archivo llamado a: foo.bar en la unidad c: ...
rackandboneman
2
@BenN: en realidad, en FAT32 es un poco diferente; almacena un nombre de archivo corto (8 + 3 bytes con "punto implícito" nombres compatibles con versiones anteriores), más un nombre de archivo largo (a menudo denominado LFN), compuesto por hasta 255 caracteres UCS-2 con punto explícito, y a menos que está trabajando con aplicaciones de 16 bits, siempre trabaja con LFN.
Matteo Italia
1
@ MatteoItalia Entiendo que los nombres largos de archivo se guardan en entradas de archivos falsos; Las instalaciones de Windows que están en conocimiento buscan estas entradas y las representan en lugar del SFN si es posible. Vea la publicación de Raymond Chen sobre el tema , o la parte VFAT de la especificación de formato FAT32 que he vinculado anteriormente.
Ben N
1
-1 te equivocas acerca de las extensiones de directorio; tal vez era cierto para CP / M (mi memoria es mala sobre ese sistema operativo), pero he estado usando el directorio "programm.ing" en mi árbol desde DOS veces, y veo win.tue.nl/~aeb/linux/ fs / fat / fat-1.html : las entradas de directorio se manejan exactamente como archivos, también pueden tener un nombre 8.3. Prueba: cree un directorio 8.3 ( mkdir testfile.name) y muestre su nombre de DOS en Windows ( dir /x); obtendrá TESTFI~1.NAM, como se esperaba.
vaxquis
3

El problema aquí es que Windows (DOS) permitió nombres de archivo 8.3 en los sistemas de archivos FAT. Significado, 8 caracteres, seguidos de a. seguido de tres personajes. Unix y Linux permiten cualquier carácter, excepto / y \ 0. \ 0 es el terminador de cadena de caracteres C y / es el separador de directorio. Todo lo demás puede ser usado.

Windows 95 solucionó este problema manteniendo una base de datos de nombres de archivo cortos (8.3) para metadatos de nombres de archivo largos (LFN). Si borró sus archivos del sistema operativo Windows 95, se quedaría con archivos con nombres extraños en el disco en su próxima instalación de Windows 95. Por ejemplo, "Mis documentos" podría llamarse MYDOCU ~ 1 en el disco. Obviamente, si pierde los metadatos, no podrá convertirlos fácilmente.

El shell tiene que hacer frente a muchos incrementos históricos que existen desde los días de MS-DOS.

Espero que esto ayude

Ed Neville
fuente
1
Realmente no había una base de datos per se; Windows acaba de atascar las partes del nombre de archivo largo en el disco como archivos falsos. Ver la publicación de Raymond Chen sobre el tema .
Ben N