Est-ce une mauvaise pratique que le nom du dossier contienne un point (.)? Que diriez-vous du nom de fichier avec plusieurs points?

28

Parfois, il est pratique qu'un nom de dossier contienne un point (.). Par exemple, vous stockez des données pour une expérience menée à L = 0,5. Le dossier pourrait donc être nommé:

experiment_L0.5

Un problème similaire peut survenir pour les noms de fichiers. Par exemple:

file_L0.5.txt

Travailler sous Ubuntu, est-ce une mauvaise pratique? Et si vous partagiez ces répertoires avec un utilisateur Windows?

Merci!

Hamid
la source
5
Si le point est le premier caractère, le dossier sera masqué. À part cela, je ne pense pas que cela soit important.
user3121023

Réponses:

37

Pour autant que je sache, il n'y a aucun problème avec le nommage des dossiers et des fichiers avec un ou plusieurs points.

Ubuntu n'utilise généralement pas le point et les trois caractères (tels que .txt) pour identifier le type de fichier. Donc, cela n'a pas de signification particulière dans le contexte Ubuntu. Ceci est utile lors du partage de fichiers avec Windows. Ubuntu utilise des numéros magiques dans les premiers octets du fichier pour identifier le type de fichier. Cependant, Nautilus. ignore les nombres magiques si l'extension point et trois caractères est disponible pour identifier le type de fichier. Ce paramètre peut être modifié. Voir Force nautilus à ignorer les extensions

Dans Ubuntu, le démarrage d'un fichier ou d'un dossier avec un point, tel que .experiment_L0.5, rend le fichier ou le dossier masqué. Vous pouvez basculer l'affichage des fichiers cachés en appuyant sur Ctrl+ Hdans Nautilus. Sous Windows, un nom de fichier commençant par a. n'est pas caché. Donc, si vous transférez un fichier caché nommé .experiment_L0.5dans un système Windows, il sera clairement visible.

Dans Ubuntu, un nom de fichier peut se terminer par un point car il n'a aucune signification particulière placée à la fin. Cependant, sous Windows, un point sépare le nom et l'extension du fichier, et un nom de fichier se terminant par un point mais aucune extension n'est autorisée. Lorsque j'ai essayé de créer un tel fichier sous Windows, j'ai obtenu un fichier avec juste le nom, pas de point, pas d'extension.

Référence: Wiki sur les noms de fichiers

J'espère que cela t'aides.

user68186
la source
4
C'est correct. Si vous partagez des fichiers avec Windows, vous devez éviter le caractère deux-points :, illégal dans les noms de fichiers Windows, ce qui créera des problèmes ( et c'est le cas ). Voir aussi ici .
Rmano
Merci @Rmano. J'ai ajouté un lien vers le wiki dans ma réponse.
user68186
1
En parlant de compatibilité, je pense qu'un point de fuite (comme fname.) n'est pas autorisé dans Windows non plus.
Rmano
Merci encore @Rmano. J'ai exécuté quelques tests rapides et je n'ai pas réussi à créer un fichier nommé test.dans Windows. Je mettrai à jour ma réponse.
user68186
1
Pour ajouter au commentaire de Rmano - cela peut être un problème sur Ubuntu si vous avez un lecteur Windows monté via VirtualBox. Essayer de mkdir un nom avec un point de fin échoue avec «Erreur de protocole».
bvanlew
11

La réponse courte

  • Windows n'autorise pas les caractères suivants: <>:"/\|?*( source )
  • D'autres caractères découragés sont: l'espace et le point .( source )
    • Les outils de ligne de commande sont plus difficiles à utiliser lorsque vous avez des espaces dans les noms (plus difficile, pas impossible)
    • Les points sont utilisés dans RegEx (par exemple lorsque vous souhaitez utiliser grep). Un premier point fait un fichier caché par convention sous Linux. Sous Windows, des points sont utilisés dans l'extension de fichier, qui est utilisée pour la détection du type de fichier.
  • Windows également ne permet pas les noms de fichiers CON, PRN, AUX, CLOCK$, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8et LPT9. ( source )
  • Les seuls caractères non autorisés dans les systèmes de fichiers Unix que je connais sont /et null (l'octet nul, \0).
  • Voir aussi: Limites du système de fichiers (je ne sais pas avec quel Windows vous voulez être compatible).

La réponse longue

Contexte technique: système de fichiers

Ubuntu utilise le ext4système de fichiers. Un système de fichiers suit où les fichiers sont stockés sur le stockage sous-jacent (disque ou SSD ou autre), les autorisations sous forme de propriétaire / groupe / autre peuvent lire / écrire / exécuter, horodatages, nom.

Le système de fichiers structure le stockage disponible. Le premier bloc est appelé le "superbloc". Ce bloc est utilisé pour monter un système de fichiers. Pour autant que je sache, chaque système de fichiers moderne divise son espace en blocs. Je pense (et je n'en suis pas trop sûr) que la plupart des systèmes de fichiers ont également une taille de bloc fixe, bien que la taille de bloc puisse être configurée lors de la création du système de fichiers. ext4 (et aussi ext2 et ext3) utilisent ce qu'on appelle des "inodes" pour les fichiers et les répertoires. Ces inodes contiennent des pointeurs vers d'autres blocs (qui peuvent également être des inodes ou être des "blocs de données"). Et le "premier" inode d'un fichier contient toutes les informations que j'ai mentionnées ci-dessus.

Une autre information est le "type" du fichier. "Type" peut être:

  • fichier régulier
  • annuaire
  • fichier de périphérique (bloc ou périphérique de caractères)
  • ...

En fait, vous pouvez également ouvrir des répertoires avec un éditeur:

vim /home

Comme le répertoire ne contient pas le chemin complet, mais seulement les noms du contenu, je ne vois pas pourquoi les fichiers ne peuvent pas contenir de /. Je suppose que cela pourrait être pratique. (Est-ce que quelqu'un sait pourquoi /n'est pas autorisé?)

Cependant, les choses sont différentes pour les autres systèmes de fichiers. Les FAT16 et FAT32 utilisaient une soi-disant "table d'allocation de fichiers". Cela signifie qu'il existe une table qui contient tous les fichiers qui sont stockés dans votre fichier, à quel "cluster" ils commencent et à quel cluster ils se terminent en tant que liste liée individuellement.

La chose importante que je voulais vous dire est que les caractères non autorisés peuvent également dépendre du système de fichiers.

Contexte technique: types de fichiers

  • Windows utilise des extensions de fichiers pour détecter les types de fichiers
  • Linux utilise "Magic Bytes" pour détecter les types de fichiers. Les octets magiques font partie du contenu du fichier et sont donc complètement indépendants du nom. Ces octets font partie de la spécification du type de fichier (voir la spécification png comme exemple). Il utilise également les extensions de nom de fichier pour les fichiers avec les mêmes octets magiques tels que .txtou .html(les deux sont des fichiers texte).

en relation

Martin Thoma
la source
Votre supposition concernant la façon dont FAT stocke les noms de fichiers n'est pas tout à fait correcte: en.wikipedia.org/wiki/FAT32#File_Allocation_Table - le "FAT" réel stocke la liste des clusters , tandis que les répertoires stockent une liste de noms de fichiers avec un pointeur sur le premier cluster de un fichier, similaire à la façon dont vous décrivez ext4. :) De plus, .txtet les .htmlfichiers ont en effet différentes "valeurs magiques" - essayez de renommer un fichier html test.txtet de l'exécuter file test.txt. Cela n'a pas beaucoup de pertinence avec la question d'origine, mais quand même :)
Sergey
1
Merci, j'ai supprimé la mauvaise partie de FAT. sur les valeurs magiques et file: filen'utilise pas seulement des valeurs magiques pour déterminer le type d'un fichier. Chaque fichier HTML valide est un fichier texte (dans le sens où il contient des caractères lisibles), mais tous les fichiers texte valides ne sont pas un fichier HTML valide (dans le sens où il valide par rapport aux validateurs W3C). Donc, beaucoup de types de fichiers (html, xml, csv, js, php, c, h, cpp, ...) sont en fait des fichiers texte. Seuls les fichiers binaires ont des octets magiques qui se trouvent sur des positions bien définies. Tous les fichiers que j'ai nommés ci-dessus peuvent avoir des espaces arbitraires avant le contenu.
Martin Thoma
5

Par souci d'exhaustivité, les noms qui ne sont constitués que d'un seul point .ou de deux points ..sont spéciaux:

  • . fait référence au répertoire courant
  • .. fait référence au répertoire parent

Ces entrées sont ajoutées automatiquement et existent toujours, vous ne pouvez donc pas avoir de fichier nommé .ou ...

Sergey
la source
Bon point. Cela s'applique à la fois à Windows et à Ubuntu.
user68186
1

Cela n'a pas d'importance, ni sous Linux ni dans Windows.

C'est une pratique courante d'avoir un dossier nommé "program.d" - pour enregistrer la configuration et les trucs pour un programme (regardez dans le répertoire / etc)

Ohad Cohen
la source
0

La dénomination des fichiers est très flexible dans les systèmes de fichiers Unix, Linux. Le seul nom de fichier que vous ne pouvez pas avoir est un caractère nul ou celui contenant un /dans son nom. Mais ce serait sûrement une bonne pratique d'éviter d'utiliser les caractères interdits / réservés dans d'autres systèmes du point de vue de la portabilité des noms; comme vous ne devriez pas utiliser de " * : < > ? \ / |caractères (restreint par NTFS) dans votre nom de fichier si vous souhaitez accéder au fichier dans un système Windows.

Et à propos de l'utilisation d'un .(point) dans le nom de fichier , je pense que cela devrait être bien car il ne semble pas être un caractère "réservé" dans aucun des systèmes (sauf pour OpenVMS, MS-DOS et Windows où son utilisation dans le nom de fichier / répertoire est autorisé mais la dernière occurrence sera interprétée comme le séparateur d'extension dans VMS, MS-DOS et Windows) comme mentionné dans le lien Wikipedia qui suit:

Dans d'autres systèmes, généralement considérés comme faisant partie du nom de fichier, et plusieurs périodes peuvent être autorisées. Sous Unix, une première période signifie que le fichier ou le dossier est normalement masqué.

précis
la source