¿Se considera una práctica recomendada no utilizar letras mayúsculas en la denominación de archivos?

28

La gente dice que no deberías usar espacios en los nombres de archivos Unix. ¿Hay buenas razones para no usar letras mayúsculas en los nombres de archivo (es decir, File_Name.txtvs. file_name.txt)? ¿O es solo una cuestión de preferencia personal?

DD343
fuente
Puede usar mayúsculas, pero como estándar no lo use. Solo use letras minúsculas y _ entonces file_name.txt es bueno.
Shabir A.
9
Hay algunas cosas de Unixy que usan nombres de archivo con letras mayúsculas ... algunos ejemplos incluyen Makefile, INSTALL, CHANGELOG y, por supuesto, el venerable README.
Thomas
PSR-2: el estándar de nomenclatura de facto del mundo PHP, que se ejecuta por mayoría en Linux utiliza camelCase php-fig.org/psr/psr-2
jdog

Respuestas:

46

La gente dice que no debes espacios en la denominación de archivos Unix.

La gente dice muchas cosas. Hay algunas herramientas que pueden arruinarse, pero es de esperar que sean pocas en este momento, ya que los espacios son un virus proliferado por corporaciones gigantes de sistemas operativos propiedad del consumidor y ahora imposible de evitar.

Los espacios hacen que la especificación de nombres de archivo en la línea de comando, etc., sea incómoda. Eso es todo. Los únicos caracteres categóricamente prohibidos en los sistemas * nix son NUL (no se preocupe, no está en su teclado ni en el de nadie más) y /, dado que ese es el separador de ruta. 1 Aparte de eso, todo vale. Los elementos de ruta individuales (nombres de archivo) están limitados a 255 bytes (una posible complicación si está utilizando conjuntos de caracteres extendidos) y rutas completas a 4 KiB.

¿O es solo una cuestión de preferencia personal?

Yo diría que lo es. La mayoría de DE parecen crear una serie de directorios en mayúsculas en su $HOME( Downloads, Desktop, Documents- el Des muy popular), por lo que no hay nada extraño en ello. También hay archivos tradicionales muy comunes con mayúsculas, como .Xclientsy .Xauthority.

Un valor de capitalizar las cosas al principio es que, cuando se enumeran lexicográficamente, aparecerán antes que las minúsculas, al menos, con muchas herramientas y sujetas a la configuración regional.

Soy fanático de camel case (también conocido como camelCase) y lo uso con nombres de archivos, por ejemplo, /home/goldilocks/blueSuedeShoesno importa lo que haya allí. Definitivamente es una cuestión de preferencia personal, pero aún no me causa pena.

Los archivos de clase de Java tienden a contener mayúsculas por naturaleza, porque los nombres de clase de Java sí. Y, por supuesto, no lo olvidemos NetworkManager, incluso si algunos de nosotros preferiríamos hacerlo.


1. Existe un "conjunto de caracteres de nombre de archivo portátil" mucho más delimitado, recomendado por POSIX que no incluye el espacio, ¡pero sí mayúsculas! POSIX también especifica la restricción más general con respecto al "carácter de barra diagonal y el byte nulo" en otra parte del mismo documento . Esto refleja o se refleja en prácticas convencionales de larga data .

encerrada dorada
fuente
55
Mia: "¿Es eso un hecho?" Vincent: "No, no lo es, es justo lo que escuché". Mia: "¿Quién te dijo esto?" Vincent: "Ellos". Mia: "Hablan mucho, ¿no?" Vincent: "Ciertamente lo hacen".
corsiKa
44
“El valor de capitalizar algo al principio es que cuando aparece lexicográfico [...], que van a venir antes de todo lo demás.” - Por supuesto, esto sólo funciona si la mayor parte de los nombres de archivo se escriben en minúscula, que le da una razón para reservas tapones ( al menos las principales tapas) para sus READMEs y Makefiles y así sucesivamente.
Blacklight Shining
44
En muchos teclados, ctrl-space o ctrl- @ o alt-0 escribirán un NUL.
dubiousjim
2
@dodgethesteamroller Creo que está completamente equivocado sobre la barra diagonal (o más precisamente, el byte con valor 0x2F) en ext *. De hecho, no creo que llegue al sistema de archivos; la capa VFS no lo permitirá, independientemente del almacén de respaldo.
zwol
3
simplemente no use espacios en los nombres de archivos y directorios. incluso si su sistema lo permite técnicamente, solo causará su dolor. En su lugar, use "_" el carácter de subrayado.
SnakeDoc
9

Una razón para evitar mayúsculas en los nombres de archivo es que el orden de clasificación en Unix distingue entre mayúsculas y minúsculas, por lo que los archivos que comienzan con una letra mayúscula aparecerán desordenados. Esa es la razón por la Makefileque generalmente se nombra con mayúscula M: es uno de los archivos que desea ver primero, sin desplazarse / saltar hacia abajo a-l.

Dicho esto, puede hacerlo mucho peor en términos de nombres de archivo:

  • el uso de espacios romperá algunos programas y scripts mal escritos que no citan los nombres de archivo correctamente
  • iniciar un nombre de archivo con un -puede causar problemas, ya que muchos programas lo verán como una opción de línea de comandos en lugar de un nombre de archivo (por ejemplo rm -r, no eliminarán un archivo llamado -r).
  • comenzar un nombre de archivo con un .lo ocultará de muchas utilidades y el bloqueo de shell (por ejemplo rm *, no eliminará archivos como .config)
  • El uso de caracteres especiales como |<>*?e incluso caracteres no imprimibles como newlinees técnicamente posible, pero puede romper scripts / programas similares al carácter de espacio. La diferencia es que el carácter espacial se usa a menudo, por lo que los programadores tienden a probar sus programas contra él, mientras que los personajes menos populares a menudo permanecen sin probar.
Dmitry Grigoryev
fuente
44
Esto ya no suele ser cierto, la ordenación en las ubicaciones modernas tiende a ser insensible a las mayúsculas y minúsculas hoy en día y muchas herramientas y restricciones de shell respetan la ubicación para ordenar los nombres de archivos.
Stéphane Chazelas
2
¿Querías decir: rm *no eliminará archivos como .config?
Comodín
1
@Wildcard no es realmente, pero quizás tu ejemplo sea más realista que el mío. Mi punto era mostrar que los nombres de archivo que comienzan con un punto son inmunes a la globalización, incluso si el usuario especifica ese punto explícitamente.
Dmitry Grigoryev
1
@DmitryGrigoryev, no, no lo son. Pruebe ls -ald. ?? * en cualquier directorio que tenga archivos de puntos.
Bill Barth
1
Creo que sería más apropiado decir "Si elige usar letras mayúsculas en los nombres de archivo, debe tener en cuenta el hecho de que el orden de clasificación en Unix distingue (a veces) mayúsculas y minúsculas". El usuario puede querer este comportamiento, Makefiley READMEson ejemplos perfectos de eso. Tenga en cuenta también que este efecto es insignificante si la letra no es la primera letra del nombre, por lo que no es un gran problema si usa camelCase. Claro, te sorprendería verlo anOctagonantes angle, pero al menos estarían juntos en la lista.
G-Man dice 'reinstalar a Monica' el
6

Si va a interactuar con un entorno de Windows, debe evitar las mayúsculas porque Windows lo pondrá todo en minúsculas. Esto es más a menudo un problema al revés; un enlace a Page_2.htmlencontrará page_2.htmlen Windows, pero fracasará en Unix.

NL_Derek
fuente
10
Eso no es cierto. NTFS, VFAT y exFAT no distinguen entre mayúsculas y minúsculas pero conservan mayúsculas y minúsculas, lo que significa que ignoran las mayúsculas y minúsculas para fines de búsqueda, pero no obstante almacenan mayúsculas y minúsculas. Lo mismo se aplica a HFS +, el sistema de archivos predeterminado en OSX. NTFS incluso tiene un espacio de nombres POSIX que funciona exactamente como todos los demás Unices, es decir, nombres de archivo muy largos de octetos no interpretados, con solo NULy /prohibido.
Jörg W Mittag
55
Más concretamente, "no distingue entre mayúsculas y minúsculas pero conserva mayúsculas y minúsculas" es otra forma de decir "capaz de sobrescribir silenciosamente el archivo A porque su nombre solo difiere en el caso del archivo B" (o viceversa, dependiendo de lo que se guardó más adelante). En otras palabras, si está utilizando un shell * nix para acceder a un cat > Foorecurso compartido NTFS, sobrescribirá el archivo foo. Este comportamiento es probable que sea inesperado y confuso si estás acostumbrado a mayúsculas y preservar y sistemas de archivos entre mayúsculas y minúsculas, como ext *.
dodgethesteamroller
1
@ JörgWMittag A menos que me equivoque, NTFS no distingue entre mayúsculas y minúsculas, es solo que Windows funciona de manera misteriosa.
Cthulhu
1
@Cthulhu: AFAIK, NTFS tiene cuatro espacios de nombres diferentes en los que puede crear nombres para archivos. (Sin embargo, no sé si un solo archivo puede tener un nombre en más de un espacio de nombres). Un espacio de nombres "DOS" (8.3, no distingue entre mayúsculas y minúsculas), un espacio de nombres "largo" (no distingue entre mayúsculas y minúsculas, preservar mayúsculas y minúsculas, UTF-16), un espacio de nombres especial para nombres "cortos largos", es decir, nombres cuyo caso debe conservarse pero que encajan en 8.3, y un espacio de nombres POSIX (una secuencia de octetos distintos de \0y /, mayúsculas y minúsculas). Al menos así es como lo recuerdo. Pero estoy de acuerdo en que es un desastre. Hay más restricciones en el ...
Jörg W Mittag
1
... kernel, e incluso más restricciones en la API (en realidad, hay diferentes API de diferentes épocas con diferentes restricciones), hay restricciones debido a la compatibilidad con DOS y FAT, hay restricciones en el intérprete de comandos, hay restricciones en el ( gráfico), y hay restricciones en Explorer. Y a menudo es imposible determinar de manera confiable de dónde proviene una restricción. Es una locura. Una vez logré crear un archivo usando el Explorador , que no se podía abrir, copiar, mover, renombrar o eliminar usando ninguna herramienta que probé. Básicamente se quedó en ...
Jörg W Mittag
4

Una razón para evitar mayúsculas es que bashla finalización de tabulación distingue entre mayúsculas y minúsculas (al menos de manera predeterminada); esto todavía me hace tropezar cada vez que termino frente a una bashconfiguración predeterminada. Claro, hay otros shells populares, pero esto combinado con el hecho de que bashes el shell de inicio de sesión predeterminado en muchos sistemas operativos significa que a menudo se completa con mayúsculas y minúsculas. El uso de nombres de archivo en minúsculas simplifica las cosas aquí.

Blacklight Shining
fuente
2
echo set completion-ignore-case On >> ~/.inputrcpuede ayudar un poco, al menos en su propio sistema.
wchargin
1
No tengo claro cuál es el punto de esta respuesta, a menos que sea que puedas olvidar cómo deletreaste un nombre de archivo. Por ejemplo, si crea un archivo llamado Fooy luego escribe cat f(Tab), fallará. Pero lo mismo sucede si escribe cat foo, cat Foobaro cat Fuel hecho de que tendrá problemas para acceder a un archivo cuyo nombre no recuerda correctamente no tiene nada que ver con el autocompletado.
G-Man dice 'Restablecer a Monica' el
@ G-Man Touché. Aún así, el uso de nombres de archivo en minúsculas significa que tiene algo menos que recordar sobre ellos.
Blacklight Shining
3

Como NL_Derek abrió esta lata de gusanos, pero no la articuló correctamente, diré esto:

Está bien usar letras mayúsculas, pero debe evitar crear archivos (en el mismo directorio) que difieran solo por mayúsculas y minúsculas , por ejemplo, File_Name.txt y file_name.txt , porque

  • Si de alguna manera pone el directorio a disposición de un sistema Windows, no podrá acceder a ambos archivos. Probablemente podrá acceder solo al que aparece primero en el directorio, independientemente del nombre que utilice. (Excepto: puede darle acceso a ellos como FILENA~1.TXTy FILENA~2.TXT - escriba dir /xpara ver qué nombre corto (si corresponde) va con qué nombre largo).
  • Si el sistema de archivos es en realidad un sistema de archivos de Windows (por ejemplo, montado desde un sistema de archivos exFAT o NTFS desde un servidor NFS que ejecuta Windows), los dos nombres (probablemente) no podrán coexistir. Por ejemplo, si lo hace y , puede terminar con un solo archivo, que contiene la salida de .cmd1 > foocmd2 > Foocmd2
  • Del mismo modo, si alguna vez transfiere los archivos a un sistema Windows, los dos nombres (probablemente) no podrán coexistir. Por ejemplo, si creó un archivo comprimido (p. Ej., Zip) que contiene los dos archivos y lo extrajo en un sistema Windows, el segundo archivo probablemente sobrescribirá el primero. Lo mismo si los transfirió a un cuadro de Windows con FTP o algo similar.
G-Man dice 'restablecer a Monica'
fuente
No solo Windows, sino varios otros sistemas operativos (VMS, creo, CP / M ciertamente, otros ...)
Toby Speight
3

Además de razones técnicas, tengo un aspecto práctico para esto. Pegarse en letras minúsculas asegurará que las búsquedas sean más fáciles a menos que uno sea demasiado aficionado a usar grep -i o localizar -i. A veces, incluso camelCase puede ser confuso si uno tiene que usar una cadena de palabras similares como en el almacenamientoNYCDCPrimary. Por lo tanto, creo que es mejor atenerse a las minúsculas y salpicarlas con guiones bajos o guiones para facilitar la lectura, como storage_nyc_dc_primary.

Saltando conejito
fuente
snake_case es agradable a la vista, storageNycDcPrimaryy StorageNycDcPrimaryambos son raros de leer.
go2null
1

Puedo hacer considero que es la mejor práctica para evitar el uso de mayúsculas y espacios en los nombres de archivo.

Algunos dirán que no están de acuerdo, pero es un asunto o lo que yo llamo creencias religiosas : difícil de discutir y acordar. Los que no están de acuerdo dicen que la mayoría de las herramientas ahora están arregladas para ser mayúsculas y espacios amigables: tienen razón, pero esta no es la pregunta.

La pregunta correcta es cuánto necesita usar mayúsculas y espacios en los nombres de archivo. A esta pregunta, excepto cuando estoy programando en Java, la respuesta es principalmente todo el tiempo: no necesito mayúsculas y espacios en mis nombres de archivo . Todos los espacios los reemplazo por un guión bajo ( _) o un signo menos ( -), y por eso no uso el caso de camello (también conocido como camelCase) contrario a alguna otra religión.

Muchas personas me criticaron por hacer y enseñar eso, algunos todavía lo hacen, algunos tropezaron con una herramienta que no era amigable con el capital / espacio y vinieron a mí diciendo que tenía razón y que deberían haberme escuchado. Haga lo que quiera , y si usa mayúsculas y espacios en el nombre del archivo, espero que nunca se tropiece con una herramienta mal escrita. Sin embargo, si tropieza con dicha herramienta, con suerte nuevamente, no será difícil de arreglar y no le costará a su negocio y / o mucho dinero y / o tiempo. Pero si termina teniendo malas repercusiones, recordará que algunos le dijeron en el pasado que usar mayúsculas y espacios en los nombres de archivos es una mala práctica.

Y una última cosa, si desea evitar todos los problemas , no hay caracteres especiales en los nombres de archivo (solo letras minúsculas, dígitos, guiones bajos y menos [1]). Esta lista de caracteres no deseados también incluye todos los caracteres no ascii (sí, francés y otras personas no inglesas, y yo soy uno de ellos), ninguno de esos: à, â, ä, ç, é, ..., ö, æ, œ , ...) Esto también se extiende a muchas otras cosas, incluido el inicio de sesión y la contraseña . Te dejaré adivinar qué sucede cuando pones una cita o una cita doble ( 'o ") en un nombre de usuario o contraseña manejado por un script bash no escrito por un administrador de sistemas confirmado ...

[1]: tal vez podríamos extender el proceso a ~, @, #y algunos otros, pero esto está en busca de problemas (y sí sé acerca de los archivos de Emacs ...).

jfg956
fuente
1
Lo último es algo que debe ser manejado por el sistema de autenticación, no por el usuario que se le ocurre la contraseña. Si el sistema limita el conjunto de caracteres permitidos en las contraseñas, es un sistema incorrecto.
Blacklight Shining
Bueno, limitar los caracteres en la contraseña es un tema de debate: li1, oO0, ... dependiendo del aficionado, difícil de comunicar. Algunos dirían que la contraseña no debe comunicarse, pero una clave WiFi es un tipo de contraseña que comunico a mis amigos cuando están en mi casa ...
jfg956
Esa es una elección consciente de su parte para evitar el uso de algunos caracteres, en lugar de una limitación integrada en el sistema (en este ejemplo, los estándares de Wi-Fi, AP e implementaciones de clientes, etc.). Si está usando una cadena de caracteres seleccionados al azar como contraseña, puede mejorar la legibilidad usando (o alentando a los destinatarios a usar) una fuente monoespaciada, o simplemente usando glifos más distintivos si los está escribiendo a mano (en minúscula) L, I mayúscula y dígito 1; O minúscula más pequeña, O mayúscula más redonda, dígito 0 con barra o punteada; etc.). Alternativamente, podría usar una frase de contraseña.
Blacklight Shining