Utilisation de soulignement dans les noms de fichiers?

26

J'utilise la ligne de commande fréquemment pour parcourir mes fichiers, donc j'essaie de ne pas avoir d'espaces dans les noms de fichiers. En règle générale, j'ai utilisé un trait de soulignement pour connecter les mots, mais il a récemment été suggéré d'utiliser un tiret. Y a-t-il des inconvénients à utiliser un trait de soulignement dans les noms de fichiers? Dois-je passer à un tiret? Mon système exécute Xubuntu et j'utilise presque exclusivement le shell bash.

Merci

DQdlM
la source
1
Si vous utilisez LaTeX, vous devrez peut-être protéger le nom de fichier entre deux crochets {...}. En cas de script automatique, vous devriez le considérer. Le _est utilisé pour créer un indice et doit être inclus par exemple dans $...$pour éviter les erreurs, mais il générera un texte différent de ce que vous attendez. Dans le terminal amélioré de gnuplot aussi ..
Hastur

Réponses:

23

En ce qui concerne le système d'exploitation, ils sont tous deux aussi utilisables les uns que les autres.

Une chose que je voudrais noter - certains logiciels (tels que certains systèmes de lecture vidéo - XBMC, etc.) remplaceront automatiquement les traits de soulignement par des espaces lors de l'affichage des fichiers pour les rendre plus beaux.

Pour cette seule raison, je serais tenté de m'en tenir aux soulignements.

En outre, les tirets sont utilisés pour les commutateurs de commandes, il peut donc être un peu déroutant d'avoir des traits d'union dans vos noms de fichiers ainsi que dans vos commutateurs de commande.

A part cela, c'est uniquement dû à un choix personnel.

Majenko
la source
1
J'utilise des tirets, mais c'est parce que j'aime mieux le look. Pour raison technique derrière cela.
beatgammit
Merci! C'est ce que je soupçonnais, mais j'ai également constaté que le simple fait de soupçonner peut me causer des ennuis.
DQdlM
16

Dash ne vous oblige pas à appuyer sur MAJ, ce qui signifie que vous tapez plus rapidement. C'est le seul autre avantage auquel je puisse penser au-dessus de ce que M. Jenkins a suggéré.

Il est probable que la personne qui fait cette suggestion est un utilisateur passionné de Vim et souhaite tout faire avec le moins de mouvements de clavier.

LawrenceC
la source
7
Si tel était le cas, ils utiliseraient à la viplace - une frappe de moins;)
Majenko
4
@Matt c'est fini aliasde vtoute façon ;-)
Daniel Beck
+1 Pour cette même raison, j'utilise des traits de soulignement avec des noms en majuscules, comme FOO_BAR(je n'utilise pas de verrouillage des majuscules, il est donc agréable de pouvoir maintenir Shift enfoncé tout le temps).
Richard Hansen
@DanielBeck J'ai en fait cela dans mes alias bash, ainsi que gpour git:)
Jan Warchoł
Je crois que vim considère deux mots séparés par un trait d'union comme un seul mot, donc cela pourrait être une raison d'utiliser des traits de soulignement dans les noms de fichiers en tant qu'utilisateur vim.
oddRaven
8

Ma recommandation est d'utiliser des traits de soulignement au lieu d'espaces. Les traits de soulignement sont généralement la convention que les gens utilisent lors du remplacement des espaces, bien que les tirets soient également très bien, je dirais. Mais étant donné que les tirets peuvent apparaître d'autres façons, comme les mots avec trait d'union, vous aurez plus de succès à conserver une valeur de nom en utilisant des traits de soulignement. Par exemple, si vous avez un fichier appelé "Une photo prise à Winston-Salem, NC.jpg" et que vous souhaitez convertir les espaces en traits de soulignement, vous pouvez conserver le trait d'union dans le nom et conserver sa signification.

Les espaces causent des problèmes aux personnes qui souhaitent utiliser la ligne de commande de manière avancée, comme dans les boucles for comme celle-ci:

for file in *.mp3 ; do mpg321 $file -w - | oggenc -o ${file%%.mp3}.ogg - ; done

Si l'un des fichiers mp3 correspondant à ce caractère générique a des espaces dans leur nom, cela entraînera la décomposition du nom de fichier en sections au lieu de l'ensemble. Vous pouvez contourner cela en changeant la variable IFS du shell BASH ou en utilisant la commande find, mais c'est une gêne et beaucoup de gens ne le savent pas, donc cela peut causer des problèmes.

Je doute que cela ou même une campagne d'autocollants pour pare-chocs empêcherait les gens de mettre des espaces dans les noms de fichiers, mais si vous voulez vous aider, plus de pouvoir pour vous et merci au nom de ceux d'entre nous qui se soucient.

deltaray
la source
1
Je suis totalement d'accord. Un nom de fichier bien construit ne nécessite aucun espace.
DQdlM
4
@KennyPeanuts - mais un programme bien écrit ne s'étouffe pas sur les espaces.
detly
2
@detly - touche '
DQdlM
1
@detly Non, un bon programmeur comprend qu'il doit y avoir des limites à ce que vous pouvez et devez faire. Si vous dites qu'il ne devrait pas s'étouffer dans les espaces, alors quelqu'un pourrait en faire un et dire qu'il ne devrait pas s'étouffer en fin de ligne, alors quelqu'un dirait qu'il ne devrait pas s'étouffer /, alors quelqu'un pourrait dire qu'il ne devrait pas s'étouffer à la fin du fichier. Il y a un vieux dicton "Formule pour l'échec: essayez de plaire à tout le monde".
deltaray
1
La spécification du système de fichiers vous indique vers quoi coder, ni plus, ni moins. Sur Ext2 / 3/4, par exemple, un nom de fichier peut contenir n'importe quel caractère sauf \0ou \\\`. Coding to anything less than that is broken by design. So, no, it shouldn't choke on spaces, or EOL, or non-ASCII characters, or anything that isn't \ 0` ou `\`. L'utilisation de fonctions de bibliothèque pour la manipulation de chemin de fichier est la voie à suivre, car de nombreuses autres personnes ont déjà résolu ces problèmes.
detly
5

La seule raison pour laquelle vous devriez envisager d'utiliser des tirets au lieu de traits de soulignement est la lisibilité de base. Les soulignements fréquents ont tendance à fausser la lecture, car cela change la ligne de votre vision du centre de l'axe des Y vers le bas. Les traits d'union le rendent cependant plus agréable à l'œil.

En ce qui concerne le système d'exploitation, les deux caractères sont également valides et ne nécessitent pas de s'échapper (quels espaces le font, et donc sont difficiles à travailler).

Varun Madiath
la source
2
Je trouve que la raison fondamentale de la lisibilité est purement subjective. Je trouve les soulignés plus faciles à lire car je peux les ignorer visuellement - pas les lire - tandis que les tirets doivent être lus.
goliatone
3

Personnellement, je préfère les tirets au trait de soulignement car vous n'avez pas besoin de maintenir la touche Maj enfoncée pour eux. Mais une chose à retenir est que si vous faites principalement du codage python - et que votre arbre de code contient des fichiers / répertoires avec un trait d'union et que vous avez l'intention de les utiliser comme modules (faites un nom de fichier importé dans votre code), cela provoquera des erreurs car les modules python ne peuvent pas contenir de trait d'union. Bien sûr, il existe des façons détournées d'importer des modules qui ont un trait d'union, mais je m'en tiendrai au trait de soulignement car il suit également les directives PEP-8.

Donc, pour la plupart de mes bacs / programmes ou alias, j'utilise des tirets, mais quand il s'agit d'écrire des programmes / modules python - j'utilise des traits de soulignement.

Saurabh Hirani
la source
2

Il y a de bonnes raisons d'utiliser des traits d'union dans tout contexte Web mappé à un système de fichiers Unix.

URL               What search indexes see
foo-baz-bang      foo baz bang
foo_baz_bang      foobazbang

En tant que développeur Web, cela m'a obligé à rester avec des tirets lors de la séparation des mots.

riche souvenir
la source
1
Le contexte mentionné ci-dessus est probablement lié - entre autres - à un article de blog de Matt Cutts 2005 impliquant la préférence algorithmique de Google pour les tirets par rapport aux traits de soulignement comme un meilleur indicateur d'un espace réservé d'espace blanc.
jmmygoggle