¿Es una mala práctica que el nombre de la carpeta contenga punto (.)? ¿Qué tal el nombre de archivo con múltiples puntos?

28

A veces tiene sentido práctico que un nombre de carpeta contenga un punto (.). Por ejemplo, está almacenando datos para un experimento realizado a L = 0.5. Entonces la carpeta podría llamarse:

experiment_L0.5

Un problema similar puede surgir para los nombres de archivo. Por ejemplo:

file_L0.5.txt

Trabajar en Ubuntu, ¿es esta una mala práctica? ¿Qué tal si comparte estos directorios con un usuario de Windows?

¡Gracias!

Hamid
fuente
55
Si el punto es el primer carácter, la carpeta estará oculta. Aparte de eso, no creo que importe.
user3121023

Respuestas:

37

Hasta donde sé, no hay problemas al nombrar carpetas y archivos con uno o varios puntos.

Ubuntu generalmente no usa el punto y los tres caracteres (como .txt) para identificar el tipo de archivo. Entonces esto no tiene un significado especial en el contexto de Ubuntu. Esto es útil al compartir archivos con Windows. Ubuntu usa números mágicos en los primeros bytes del archivo para identificar el tipo de archivo. Sin embargo, Nautilus. ignora los números mágicos si la extensión de punto y tres caracteres está disponible para identificar el tipo de archivo. Esta configuración se puede cambiar. Ver Forzar nautilus para ignorar extensiones

En Ubuntu, iniciar un nombre de archivo o carpeta con un punto, como por ejemplo .experiment_L0.5, oculta el archivo o la carpeta. Puede alternar la visualización de archivos ocultos presionando Ctrl+ Hen Nautilus. En Windows, un nombre de archivo que comienza con a. No está oculto. Entonces, si transfiere un archivo oculto con nombre .experiment_L0.5a un sistema Windows, será claramente visible.

En Ubuntu, un nombre de archivo puede terminar con un punto, ya que no tiene un significado especial al final. Sin embargo, en Windows un punto separa el nombre y la extensión del archivo, y un nombre de archivo que termina con un punto pero no se permite ninguna extensión. Cuando intenté crear dicho archivo en Windows, obtuve un archivo con solo el nombre, sin punto, sin extensión.

Referencia: Wiki sobre nombres de archivos

Espero que esto ayude.

usuario68186
fuente
44
Esto es correcto. Si comparte archivos con Windows, debe evitar los dos puntos :, ilegales en los nombres de archivos de Windows, lo que creará problemas ( y lo hace ). Ver también aquí .
Rmano
Gracias @Rmano. He agregado un enlace a la wiki en mi respuesta.
user68186
1
Hablando de compatibilidad, creo que un punto final (como fname.) tampoco está permitido en Windows.
Rmano
Gracias de nuevo @Rmano. Ejecuté algunas pruebas rápidas y no pude crear un archivo con nombre test.en Windows. Actualizaré mi respuesta.
user68186
1
Para agregar al comentario de Rmano, esto puede ser un problema en Ubuntu si tiene una unidad de Windows montada a través de VirtualBox. Intentar mkdir un nombre con un punto final falla con 'Error de protocolo'.
bvanlew
11

La respuesta corta

  • Windows no permite los siguientes caracteres: <>:"/\|?*( fuente )
  • Más personajes que se desaniman son: espacio y punto .( fuente )
    • Las herramientas de línea de comando son más difíciles de usar cuando tiene espacios en los nombres (más difícil, no imposible)
    • Los puntos se usan en RegEx (por ejemplo, cuando se quiere usar grep). Un punto inicial crea un archivo oculto por convención en Linux. En Windows, los puntos se usan en la extensión de archivo, que se usa para la detección del tipo de archivo.
  • Windows también no permitirá que los nombres de archivo CON, PRN, AUX, CLOCK$, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, y LPT9. ( fuente )
  • Los únicos caracteres que no están permitidos en los sistemas de archivos Unix que conozco son /nulos (el byte nulo \0).
  • Consulte también: Límites del sistema de archivos (no sé con qué Windows desea ser compatible).

La respuesta larga

Antecedentes técnicos: sistema de archivos

Ubuntu hace uso del ext4sistema de archivos. Un sistema de archivos rastrea dónde se almacenan los archivos en el almacenamiento subyacente (disco o SSD o lo que sea), los permisos en forma de propietario / grupo / otro pueden leer / escribir / ejecutar, marcas de tiempo, nombre.

El sistema de archivos estructura el almacenamiento disponible. El primer bloque se llama "superbloque". Este bloque se usa para montar un sistema de archivos. Hasta donde yo sé, cada sistema de archivos moderno divide su espacio en bloques. Creo (y no estoy muy seguro) que la mayoría de los sistemas de archivos también tienen un tamaño de bloque fijo, aunque el tamaño del bloque se puede configurar cuando se crea el sistema de archivos. ext4 (y también ext2 y ext3) utilizan los llamados "inodes" para archivos y directorios. Esos inodes contienen punteros a otros bloques (que también pueden ser inodes o "bloques de datos"). Y el "primer" inodo de un archivo contiene toda la información que mencioné anteriormente.

Otra información es el "tipo" del archivo. "Tipo" puede ser:

  • archivo regular
  • directorio
  • archivo de dispositivo (dispositivo de bloque o de caracteres)
  • ...

De hecho, también puede abrir directorios con un editor:

vim /home

Como el directorio no contiene la ruta completa, sino solo los nombres del contenido, no veo una razón por la cual los archivos no pueden contener un /. Supongo que podría ser conveniente. (¿Alguien sabe por qué /no está permitido?)

Sin embargo, las cosas son diferentes para otros sistemas de archivos. El FAT16 y FAT32 usaban la llamada "tabla de asignación de archivos". Esto significa que hay una tabla que contiene todos los archivos que están almacenados en su archivo, en qué "grupo" comienzan y en qué grupo terminan como una lista individualmente vinculada.

Lo importante que quería decirte es que los caracteres no permitidos también pueden depender del sistema de archivos.

Antecedentes técnicos: tipos de archivo

  • Windows usa extensiones de archivo para detectar tipos de archivo
  • Linux usa "Bytes mágicos" para detectar tipos de archivos. Los bytes mágicos son parte del contenido del archivo y, por lo tanto, son completamente independientes del nombre. Estos bytes son parte de la especificación del tipo de archivo (consulte la especificación png como ejemplo). También utiliza las extensiones de nombre de archivo para archivos con los mismos bytes mágicos como .txto .html(ambos son archivos de texto).

Relacionado

Martin Thoma
fuente
Su conjetura acerca de cómo FAT almacena nombres de archivos no es del todo correcta: en.wikipedia.org/wiki/FAT32#File_Allocation_Table : la "FAT" real almacena la lista de grupos , mientras que los directorios almacenan una lista de nombres de archivos con un puntero al primer grupo de un archivo, similar a cómo describe ext4. :) Además, .txty los .htmlarchivos tienen diferentes "valores mágicos" - intente renombrar un archivo html test.txty ejecutarlo file test.txt. No tiene mucha relevancia para la pregunta original, pero aún así :)
Sergey
1
Gracias, he eliminado la parte incorrecta sobre FAT. sobre los valores mágicos y file: fileno solo utiliza valores mágicos para determinar el tipo de archivo. Cada archivo HTML válido es un archivo de texto (en el sentido de que contiene caracteres legibles), pero no todos los archivos de texto válidos son archivos HTML válidos (en el sentido de que se validan con los validadores W3C). Entonces, muchos tipos de archivos (html, xml, csv, js, php, c, h, cpp, ...) son, de hecho, archivos de texto. Solo los archivos binarios tienen bytes mágicos que están en posiciones bien definidas. Todos los archivos que mencioné anteriormente pueden tener espacios en blanco arbitrarios antes del contenido.
Martin Thoma
5

Para completar, los nombres que consisten solo en un punto .o dos puntos ..son especiales:

  • . se refiere al directorio actual
  • .. se refiere al directorio padre

Esas entradas se agregan automáticamente y siempre existen, por lo que no puede tener un archivo llamado .o ...

Sergey
fuente
Buen punto. Esto se aplica tanto a Windows como a Ubuntu.
user68186
1

Esto no importa, ni en Linux ni en Windows.

Es una práctica común tener una carpeta llamada "program.d" - para guardar la configuración y otras cosas para un programa (busque en el directorio / etc)

Ohad Cohen
fuente
0

La nomenclatura de archivos es muy flexible en Unix, sistemas de archivos Linux. El único nombre de archivo que no puede tener es un carácter nulo o el que contiene un /en su nombre. Pero seguramente sería una buena práctica evitar usar los caracteres que están prohibidos / reservados en otros sistemas desde el punto de vista de la portabilidad de nombres; como si no debiera usar ninguno de los " * : < > ? \ / |caracteres (restringido por NTFS) en su nombre de archivo si desea acceder al archivo en un sistema Windows.

Y sobre el uso de un .(punto) en el nombre del archivo , creo que debería estar bien, ya que no parece ser un carácter "reservado" en ninguno de los sistemas (excepto OpenVMS, MS-DOS y Windows donde se usa en el nombre de archivo / directorio está permitido, pero la última aparición se interpretará como el separador de extensión en VMS, MS-DOS y Windows) como se menciona en el siguiente enlace de Wikipedia:

En otros sistemas, generalmente considerados como parte del nombre de archivo, se puede permitir más de un período. En Unix, un punto inicial significa que el archivo o carpeta normalmente está oculto.

preciso
fuente