38 votes

Les dotfiles ont-ils une extension de fichier ?

Faites des dotfiles, comme .htaccess .gitignore y .config ont une extension de fichier et pas de nom de fichier ou sont-elles considérées comme ayant un nom de fichier et pas d'extension ?


J'essaie d'implémenter quelques fonctions utilitaires en PHP, qui est connu pour faire des erreurs, et j'ai remarqué que la fonction de PHP pathinfo considère que les dotfiles ont une extension de fichier et pas de nom de fichier, alors que la fonction node path.extname considère que les dotfiles ont un nom de fichier et pas d'extension.

Je ne sais pas s'il existe une norme ou si cela relève de la préférence des développeurs.

19voto

Jonathan Leffler Points 299946

Vous payez votre argent et vous faites votre choix : Oui, Non, Peut-être.

Tout dépend de votre définition du terme "extension".

  • Est-ce que c'est "tout ce qui suit le dernier point du nom" ? Si c'est le cas, ces fichiers n'ont pas de nom et sont tous des extensions.
  • Est-ce que c'est "tout ce qui suit un point et qui n'est pas le premier caractère du nom" ? Si c'est le cas, ces fichiers n'ont pas d'extension.
  • Si vous utilisez une autre définition, la réponse devra être adaptée en conséquence.

Rappelez-vous que les fichiers SCCS utilisaient un préfixe s. (entre autres ; vous verriez p. et il y avait de nombreux noms de fichiers transitoires avec d'autres préfixes). Est-ce qu'un fichier SCCS s.something ont une extension ou un préfixe ? (Avec s.source.c il est assez simple : il y a un préfixe, un nom et une extension ou un suffixe. Vous pouvez aussi ignorer le préfixe comme un cas spécial et le nom est alors s.source et l'extension est .c .) Qu'en est-il du nom de l'exécutable par défaut, a.out ? Que diriez-vous d'un nom tel que ..dot ; a-t-il une extension, et si oui, quelle est-elle ?

Notez que la réponse sur DOS était plus formelle. Là-bas, le système de fichiers avait l'habitude d'appliquer (il y a environ un autre millénaire) les noms avec 8.3 et l'extension était tangible. Mais c'est une époque révolue pour la plupart des gens (et rares sont ceux qui la regrettent).

Anthony Arnold y paxdiablo ont tous deux noté que les noms se terminant par .tar.gz existe - quelle est l'extension de ces fichiers ?

Si vous traitez l'extension de somecode-8.76.tar.gz comme quelque chose d'autre que .gz vous vous ouvrez à un sac de vers. Le fichier contenu est somecode-8.76.tar qui elle-même peut raisonnablement être considérée comme ayant une extension de .tar . Définir l'extension de l'ensemble du fichier tar gzippé comme suit .tar.gz soulève la question suivante : " pourquoi n'est-il pas .76.tar.gz "Cela signifie également que vous devez revoir la convention de dénomination des fichiers du SCCS. L'absorption de la .76 du nom dans l'un ou l'autre .76.tar.gz o .76.tar comme suffixe rend la vie complexe en effet. C'est une question valable, mais tout ce qui n'est pas "une extension est la chaîne de caractères allant du dernier point à la fin du nom" est en effet délicat - ou nécessite une interprétation de la signification de l'extension, et entre dans un autre domaine complexe qu'il est généralement préférable d'éviter.

Notez qu'Unix, au niveau du système d'exploitation ou du système de fichiers, ne se soucie pas de l'extension des fichiers. Les programmes peuvent décider qu'ils se soucient des extensions, mais c'est au programme de décider. L'extension est un indicateur du type de fichier ; elle n'est pas définitive. C'est pourquoi l'extension file existe pour identifier le contenu des fichiers. Il examine le contenu du fichier pour identifier le contenu ; il ne fait pas attention à l'extension du fichier (il n'a donc pas non plus à décider de l'extension).

7voto

Mathias Begert Points 999

La raison pour laquelle quelqu'un voudrait connaître l'extension d'un fichier est qu'il veut connaître le type (ou d'autres métadonnées) du fichier, non ?

Le nom d'un fichier point n'a rien à voir avec son type. La partie après le premier point du fichier point est son nom et aucune extension. Mais un fichier point peut également avoir une extension (par exemple .mongorc.js ou tout autre fichier caché sur un système UNIX).

Donc je dirais, que la façon dont le noeud est path.extname fait, c'est le droite manière.

Renvoie l'extension du chemin, du dernier '.' à la fin de la chaîne de caractères dans la dernière portion du chemin. S'il n'y a pas de '.' dans la dernière partie du dernière partie du chemin ou si le premier caractère de celle-ci est '.', alors elle renvoie une chaîne vide.


Il y a deux choses différentes ici :

  • Il existe d'une part le mécanisme permettant de déterminer certaines métadonnées par une par une extension de nom de fichier, par exemple pour l'ouvrir avec une application dans non unix-like systèmes.

  • Les Dotfiles, quant à eux, ne sont que des fichiers cachés (avec un nom normal et un point devant). et un point devant, pour qu'ils ne soient pas visibles pour les autres utilisateurs. ls ) provenant de unix-like systèmes. Ainsi, .gitignore est juste un fichier nommé gitignore et marquées comme cachées - il n'y a pas de extension ici.

3voto

anthony-arnold Points 6336

Je me sens obligé de laisser une réponse répondant au problème réel de l'utilisateur.

À quoi sert réellement l'extension, dans ce cas ? Des fichiers comme .gitignore , .htaccess etc. sont comparés au nom complet du fichier. Pas l'"extension" (ou l'absence d'extension) mais le nom complet.

Je plaide en faveur de la suppression de toute vérification des extensions de fichiers et de la vérification du nom du fichier. Par exemple, en PHP :

basename ("/path/to/.htaccess");

3voto

Baard Kopperud Points 253

Je dirais qu'ils sont juste caché ... Dans Unix/Linux, un fichier/répertoire est considéré comme étant caché si le premier caractère est "." (point), alors c'est juste le premier caractère - pas une extension/suffixe.

De plus, les répertoires peuvent également être cachés - y compris les répertoires "." et ".." (courant et parent) - et l'extension/suffixe n'est généralement pas quelque chose que nous associons aux répertoires. En fait, de nombreux programmes créent de tels répertoires cachés pour eux-mêmes (par exemple .foo) plutôt que pour un seul fichier (par exemple .foorc).

Enfin, Unix/Linux n'a jamais été très concerné par les suffixes de toute façon - la plupart des programmes sont capables de lire "leurs" fichiers sans en utiliser un. Au lieu de cela, Unix utilise souvent des tests du fichier "magic" (/etc/magic) et du fichier file pour déterminer le type de fichier. (L'exception notable étant les programmes de compression tels que gzip y bzip2 qui remplace l'original par une version compressée suffixée).

J'ajouterais que la terminaison "rc" (pour "run-command") - dans par exemple .bashrc, .wgetrc, .zshrc et ainsi de suite, pourrait être considérée comme un suffixe/extension pour ces types de fichiers - même s'il n'y a pas de point entre le nom et le suffixe (certains - comme .rtorrent.rc - ont en fait un point).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X