dotfiles是否有文件扩展名?

点文件(如.htaccess .gitignore.config )是否具有文件扩展名和文件名,或者是否被认为具有文件名和扩展名?


我试图在PHP中实现一些实用function,这是臭名昭着的做错事情,我注意到,PHP的pathinfo函数认为dotfiles有一个文件扩展名和没有文件名,而节点的path.extname认为dotfiles有一个文件名,没有延期。

我不清楚标准是否存在,或者这是否符合开发者偏好。

你付出你的钱,你select:是的,不,也许。

这归结于你对“扩展”的定义。

  • 这是“名称中最后一个点之后的任何东西”吗? 如果是这样,这些文件没有名称,并且都是扩展名。
  • 它是否“不是名称中的第一个字符”之后的任何东西? 如果是这样,那些文件没有扩展名。
  • 如果您使用其他定义,则需要相应调整答案。

请记住,SCCS文件使用前缀s. (除此之外,你也可以看到p.文件,而且有很多带有其他前缀的临时文件名)。 SCCS文件s.something有扩展名或前缀? (对于s.source.c ,它是相当直接的;有一个前缀,一个名称和一个扩展名或后缀,或者你可以忽略前缀作为一个特殊情况,名称是s.source ,扩展名是.c 。)那么默认的可执行文件名称a.out呢? 怎么样一个名字,如..dot ; 它是否有扩展名?如果有,是什么?

请注意,DOS上的答案是更正式的。 那里的文件系统用来执行(一个又一个千年左右)的名字与8.3和扩展是有形的。 但是大部分时间已经过去了(很less有人会错过)。

Anthony Arnold和paxdiablo都指出以.tar.gz结尾的名字存在 – 这些文件的扩展名是什么?

如果你把一些somecode-8.76.tar.gz扩展成.gz以外的任何东西,那么你正在打开自己的一个袋子。 包含的文件是somecode-8.76.tar ; 本身可以合理地说有一个扩展.tar 。 将整个gzipped tar文件的扩展名定义为.tar.gz引发了“为什么不是.76.tar.gz ”的问题,也意味着您需要重新审视SCCS文件命名约定。 将.76.tar.gz.76.tar这个名字的.76部分吸收为后缀,确实使生活变得复杂。 这是一个有效的问题,但除了“扩展名是从最后一个点到名字末尾的string”之外的任何东西确实是充满的 – 或者需要解释扩展名的含义,并进入另一个复杂的领域,它通常是最好避免。

请注意,在O / S或文件系统级别的Unix不关心文件的扩展名。 程序可以决定他们关心扩展,但是这取决于程序。 扩展名是文件types的一个指示符; 这是不确定的。 这就是为什么file程序存在识别文件的内容。 它查看文件的内容以识别内容; 它不关注文件扩展名(所以它不必决定扩展名是什么)。

为什么有人想知道文件扩展名的原因是他想知道文件的types(或其他元数据),对不对?

点文件的名称与其types无关。 dotfile的第一个点后面的部分是它的名字 ,没有扩展名。 但是dotfile文件也可以有一个扩展名(例如.mongorc.js或者UNIX系统上的其他隐藏文件)。

所以我会说,节点的path.extname这样做的方式是正确的

返回从最后一个'。'的path的延伸。 在path的最后部分结束string。 如果没有“。” 在path的最后部分或者它的第一个字符是'。',那么它返回一个空string。


这里有两个不同的东西:

  • 一方面,通过文件扩展名来确定一些元数据的机制,例如在非类Unix系统中用“默认”应用程序打开它。

  • 另一方面,点文件只是来自类Unix系统的隐藏文件(前面有一个正常名称和一个点,以使它们对ls不可见)。 所以.gitignore只是一个名为 gitignore的文件,标记为隐藏 – 这里没有扩展名

我觉得我必须留下一个解决用户的实际问题的答案。

在这种情况下,你真的需要什么扩展? 像.gitignore.htaccess等文件与文件的全名匹配。 不是“扩展”(或缺less)而是全名。

我认为这样做是为了取消对文件扩展名的检查,并检查文件的名称。 例如,在PHP中:

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

我会说他们只是隐藏 …在Unix / Linux中,如果第一个字符是“。”,则认为文件/目录是隐藏的。 (点),所以它只是第一个字符 – 不是扩展名/后缀。

此外,还可以隐藏目录 – 包括“。” 和“..”(当前和父母)的目录 – 和扩展/后缀通常不是我们与目录相关的东西。 实际上,很多程序为自己创build了这样的隐藏目录(例如.foo),而不仅仅是一个文件(例如.foorc)。

最后,Unix / Linux从来都不关心后缀 – 大多数程序都能够读取“他们”的文件,而不需要中继。 相反,Unix经常使用来自“magic”-file(/ etc / magic)和file命令的testing来确定文件types。 (值得注意的例外是像gzipbzip2这样的压缩程序,它用一个后缀压缩的版本replace原来的压缩程序)。

我会补充说,例如.bashrc,.wgetrc,.zshrc等的“rc”-ending(对于“run-command”) – 可以被认为是这些types文件的后缀/扩展名 – 事件虽然名称和后缀之间没有点(有些像.rtorrent.rc – 实际上有一个点)。

Interesting Posts