web-dev-qa-db-fra.com

Quelles sont les raisons techniques pour ne pas utiliser d'espaces dans les noms de fichiers?

Une personne de ma connaissance a exprimé aujourd'hui de l'irritation à l'égard de ceux d'entre nous qui ont tendance à ne pas utiliser d'espaces dans nos noms de fichiers, par exemple. NamingThingsLikeThis.txt - malgré la plupart des systèmes d'exploitation modernes prenant en charge les espaces dans les noms de fichiers.

Existe-t-il des raisons techniques selon lesquelles il est toujours courant de voir les noms de fichiers sans espaces (appropriés)? Si tel est le cas, quelles sont les raisons techniques pour lesquelles les espaces dans les noms de fichiers sont évités ou découragés, et dans quelles circonstances sont-elles pertinentes?

La raison la plus évidente à laquelle je puisse penser, et pourquoi je l’évite généralement, est les guillemets supplémentaires requis sur la ligne de commande pour traiter de tels fichiers. Y a-t-il d'autres raisons techniques importantes?

75
Chris W. Rea

Les caractères d'espacement dans les noms de fichiers peuvent être une douleur royale dans la proverbiale dans de nombreux contextes sur la ligne de commande et dans les scripts, où vous devez faire attention à vous assurer qu'ils sont correctement échappés afin de ne pas ressembler à des séparateurs des commandes que vous êtes fonctionnement.

Il est juste plus prudent de ne pas les avoir là, même si vous êtes sûr que le fichier/répertoire/quoi que ce soit ne sera jamais utilisé dans un tel contexte.

Ça et les vieilles habitudes ont la vie dure.

65
David Spillett

Outre les autres réponses concernant la ligne de commande et les anciennes habitudes, il existe également de nombreux protocoles réseau qui nécessitent une attention particulière lors de l'utilisation de noms de fichiers contenant des espaces.

(Si vous avez déjà essayé de télécharger "Product List.pdf" à partir d'un site Web et que vous vous êtes retrouvé avec un fichier simplement appelé "Product", vous avez été piqué par ceci, parce que le programmeur de l'autre côté ne savait pas ou ne pouvait pas ne pas comprendre les règles de citations pour l'en-tête http Content-Disposition.)

30
Stobor

Beaucoup de raisons sont historiques. Cela ne signifie pas qu'ils n'ont pas de sens aujourd'hui.

Problèmes de portabilité

Lorsque vous nommez un fichier, vous devrez peut-être également considérer comment d'autres systèmes (de fichiers) traiteront ce nom de fichier. Un caractère dans un nom de fichier peut convenir à votre système, mais peut poser problème pour un autre système.

Ainsi, aussi longtemps que la moindre possibilité que vous souhaitiez pouvoir accéder au fichier à partir d'un système ancien, vous ne devez sélectionner que le caractère safe . Cela peut inclure le démarrage dans un ancien système de récupération que vous avez conservé ou la crainte que les versions récentes de Windows reposent encore sur MS-DOS.

Longueur

Un système de fichiers peut limiter la longueur d'un fichier. C'était encore plus grave à l'époque où MS-DOS était limité à 8.3 noms de fichiers . Donc, laisser des espaces vous a permis de mettre des noms plus significatifs dans le nom.

Plusieurs autres systèmes de fichiers ont également défini des limites strictes pour la longueur des noms de fichiers. Wikipedia a une table dans l'article sur la comparaison du système de fichiers pour ceux qui veulent les détails.

Caractères réservés

MS-DOS a également défini le caractère d'espace en tant que caractère réservé. Cela est dû au fait que le caractère espace a été utilisé pour le remplissage dans la FAT . En outre, MS-DOS n'a pas fourni de système d'échappement dans le shell.

Interprétation en ligne de commande

La plupart des lignes de commande dont j'ai connaissance utilisent le caractère espace comme délimiteur de paramètre . Si vous négligez d'échapper correctement à un nom de fichier, cela peut avoir des conséquences désastreuses, car certaines parties du nom de fichier peuvent être interprétées comme des paramètres de l'application que vous souhaitez appeler.

Considérez la différence entre

rm foo bar

et

rm "foo bar"

L'article de WikiPedia lié ci-dessus souligne même l'ambiguïté introduite par le manque pour échapper correctement à une commande:

L’ambiguïté peut être évitée soit en interdisant d’abord les espaces incorporés dans les noms de fichiers et de répertoires (par exemple, en les remplaçant par des tirets bas "_"), ou, s’ils sont pris en charge par l’interpréteur de ligne de commande et les programmes prenant ces paramètres comme arguments, en insérant un nom avec des espaces incorporés entre guillemets ou en utilisant un caractère d'échappement avant l'espace, généralement une barre oblique inversée ('\'). Par exemple

Long path/Long program name Parameter one Parameter two ...

est ambigu ("nom du programme" fait-il partie du nom du programme ou deux paramètres?); toutefois

Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...

et Long\path/Long\program\name Parameter\one Parameter\two ...

ne sont pas ambigus.

Uniform Resource Locators (URL)

Lorsque vous essayez de décrire l'emplacement d'un fichier à l'aide d'une URL, vous devez échapper des espaces.

Les caractères peuvent être dangereux pour plusieurs raisons. Le caractère d'espace est dangereux car des espaces significatifs peuvent disparaître et des espaces insignifiants peuvent être introduits lorsque les URL sont transcrites ou dactylographiées ou soumises au traitement de programmes de traitement de texte.

Source: RFC1738

Ainsi, un espace doit être remplacé par un %20 à la place. Cela rend le nom de fichier de l'URL moins lisible et, par conséquent, empêche les gens de l'éviter en premier lieu.

28
Der Hochstapler

Les espaces sont codés ou convertis en %20 dans les noms de fichiers sur le Web, ce qui peut compliquer la gestion des actifs d'un site.

Avoir Image 1.png et Image%201.png est source de confusion. Il est plus facile d'utiliser Image001.png à la place.

Cela tombe vraiment dans la même catégorie que les séquences d'échappement pour la ligne de commande.

25
user7012

Parfois, les espaces peuvent présenter un problème lorsque vous utilisez la ligne de commande, lorsque vous utilisez un système d'exploitation plus ancien, ou lorsque vous écrivez des programmes qui seront compilés sur différents systèmes d'exploitation, ou lorsque ... il existe de nombreuses raisons pouvant présenter un problème, et je ne le fais pas. t vraiment l'impression qu'il est si difficile d'écrire le fichier en tant que: fichier-sans-blanks.txt ou file_without_blanks .txt . Je préfère le masque car le trait de soulignement peut parfois devenir invisible lorsqu'il s'agit, par exemple, d'une police soulignée.

Mais surtout, il s’agit d’une habitude de la vieillesse. Ce que je ne pense pas qu'il y ait assez de pro de raisons d'abandonner.


Une note supplémentaire, peut-être pas liée, mais je vais quand même la mettre ici. Les personnes qui nomment leurs fichiers avec des espaces ne pensent généralement pas beaucoup à cela; ceux qui ne savent pas souvent pourquoi il est bon de les éviter dans les noms de fichiers.
Et nous pouvons tous être d’accord, il n’ya rien de pire qu'un fichier qui porte les noms "Cher Monsieur ou Madame, je vous écris cette lettre pour vous informer de votre décision".

Pas seulement les espaces - la longueur du fichier compte également pour quelque chose, et à mon humble avis, elle ne devrait pas dépasser 30 caractères. Les noms de fichier longs avec des espaces sont également une bénédiction lors de l’enregistrement de CD, DVD, etc., qui doivent être lus sous des systèmes d’exploitation plus anciens, ainsi qu’entre des présentations Win et * nix.

5
Rook