¿Por qué algunos nombres de archivos / carpetas en Windows tienen un punto delante de ellos?

34

Por ejemplo, en My Documents, hay las siguientes carpetas:

.ssh
.subversion

¿Es esta una especie de convención de nombres que desconozco?

Niko Bellic
fuente

Respuestas:

94

Esta convención de nomenclatura proviene de sistemas operativos tipo Unix (como Linux u OS X), donde significa un archivo o directorio "oculto". Funciona en cualquier lugar, pero su uso principal es ocultar los archivos de configuración en su directorio de inicio (p. Ej. ~/.cache/O ~/.plan, a menudo se les llama "archivos de puntos").

Los archivos de puntos podrían, en cierto modo, llamarse el equivalente tradicional de Unix al directorio "AppData" en Windows. (Muchos programas de Linux están siendo cambiados para seguir la especificación del directorio base XDG , moviendo su configuración ~/.config/y otros datos a ~/.cache/& ~/.local/share/, esto lo hace un poco más similar a AppData\Roamingy AppData\Local).

Tiene estos .sshy .subversiondirectorios en Windows porque ha utilizado algunos programas, específicamente, OpenSSH y Subversion , que se han portado para usar las API del sistema de Windows en lugar de las POSIX, pero no se han ajustado para otras convenciones de Windows.

A veces, esta adaptación se omite intencionalmente, para facilitar la vida de las personas que usan entornos similares a Unix como Cygwin en sus sistemas Windows. Por ejemplo, Cygwin instala el conjunto estándar de herramientas similares a Unix como ls, que ignora la bandera "oculta" de Windows y solo respeta los .dotfilenombres. Además, el uso de la misma ubicación (p <home>/.ssh. Ej. ) Puede facilitar la sincronización de la configuración entre las computadoras Windows y Linux / BSD / OSX.

Además: por lo general, estos archivos se encuentran en el directorio de inicio del usuario , por ejemplo, en Linux o en Windows 7+. Es bastante raro que se incluyan en los subdirectorios "Documentos" o "Mis documentos"./home/name/.sshC:\Users\name\.ssh


Como Rob Pike escribe en Google+ , esta fue una característica accidental:

Hace mucho tiempo, mientras se estaba elaborando el diseño del sistema de archivos Unix , aparecieron las entradas .y ..aparecieron, para facilitar la navegación. No estoy seguro, pero creo que ..entró durante la reescritura de la Versión 2, cuando el sistema de archivos se volvió jerárquico (tenía una estructura muy diferente al principio). Sin embargo, cuando uno escribió ls, aparecieron estos archivos, por lo que Ken o Dennis agregaron una prueba simple al programa. Estaba en ensamblador entonces, pero el código en cuestión era equivalente a algo como esto:

if (name[0] == '.') continue;

Esta declaración fue un poco más corta de lo que debería haber sido, que es

if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;

pero bueno, fue fácil.

Dos cosas resultaron.

Primero, se estableció un mal precedente. Muchos otros programadores perezosos introdujeron errores al hacer la misma simplificación. Los archivos reales que comienzan con puntos a menudo se omiten cuando deben contarse.

En segundo lugar, y mucho peor, se creó la idea de un archivo "oculto" o "punto". Como consecuencia, más programadores perezosos comenzaron a soltar archivos en el directorio de inicio de todos. No tengo tantas cosas instaladas en la máquina que estoy usando para escribir esto, pero mi directorio de inicio tiene alrededor de cien archivos de puntos y ni siquiera sé qué son la mayoría de ellos o si todavía son necesarios . Cada lodo acumulado ralentiza cada evaluación de nombre de archivo que pasa por mi directorio de inicio.

Gravedad
fuente
¡Gracias! Muy minucioso. En mi carpeta "C: \ users \ <username> \", intenté usar el comando "ls" en Windows PowerShell y nuevamente en Cygwin Terminal. PowerShell enumera los archivos de puntos y oculta AppData, mientras que Cygwin Terminal hace exactamente lo contrario. ¡Interesante! Cygwin está utilizando la convención de Unix.
Niko Bellic
@NikoBellic: El Unix / Cygwin lstiene la -aopción de listar todos los archivos.
Grawity
1
@Ruslan: Por ejemplo: VMS no tenía archivos ocultos en absoluto; terminarías con cosas como LOGIN.COMo DECW$MAIL.DAT en tu directorio personal . (No estoy seguro de qué otros sistemas eran populares en ese momento). Recientemente se había creado Unix; no tenía ninguna convención en absoluto.
Grawity
2
@grawity MS-DOS 1.0 fue un O / S de estilo DEC realizado por Digital Research y comprado por Microsoft, que estaba en el negocio de Unix en ese entonces. MS-DOS 2.0 y versiones posteriores agregaron un sistema de archivos jerárquico y algunas de las convenciones de Unix, incluyendo .."up dir"; Microsoft en realidad anunció estas "características avanzadas de Unix".
Fred Foo
1
@grawity Ah, claro, fue la clonación de DRI's CP / M de Seattle Computer Products. Lo siento. Pero mi punto era que Microsoft era una tienda de Unix a principios de los años 80, y los sistemas DEC no eran el único punto de partida. (Unix originalmente se ejecutaba en hardware DEC, pero creo que estaba más influenciado por CTSS y Multics que por DEC OS).
Fred Foo