dotfiles有文件扩展名吗?

zzz*_*Bov 38 filenames file-extension dotfiles

dotfiles,例如.htaccess .gitignore.config,有文件扩展名,没有文件名,或者它们被认为是文件名而没有扩展名?


我正在尝试在PHP中实现一些实用程序函数,这是因为做错事而臭名昭着,我注意到PHP的pathinfo函数认为dotfiles有文件扩展名而没有文件名,而node's path.extname认为dotfiles有文件名而没有扩展名.

我不清楚标准是否存在,或者这是否等于开发人员偏好.

Jon*_*ler 19

你支付了你的钱并且你接受了你的选择:是的,不,也许.

它归结为您对"扩展"的定义.

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

请记住,SCCS文件使用了前缀s.(p.除此之外;您也会看到文件 - 并且有许多带有其他前缀的临时文件名).SCCS文件s.something是否具有扩展名或前缀?(有了s.source.c它,它是相当简单的;有一个前缀,一个名称和一个扩展名或后缀,或者你可以忽略前缀作为一个特例,名称是s.source和扩展名是.c.)那么默认的可执行文件名,a.out?怎么样这样的名字..dot; 它有延伸吗?如果有,它是什么?

请注意,DOS上的答案更为正式.在那里,文件系统用于强制执行(一个又一个千年左右)名称,并且扩展名是有形的.但是大部分时间都是过去的时代(并且很少有人会想念它).

Anthony Arnoldpaxdiablo都注意到以.tar.gz存在结尾的名字- 这些文件的扩展名是什么?

如果你把扩展somecode-8.76.tar.gz视为除了以外的任何东西.gz,那么你就是在打开一个袋子.包含的文件是somecode-8.76.tar; 这本身可以合理地说有延伸.tar.定义整个gzip压缩文件的扩展名.tar.gz引发了"为什么不是它.76.tar.gz" 的问题,并且还意味着您需要重新访问SCCS文件命名约定..76将名称的一部分吸收到一个.76.tar.gz.76.tar作为后缀使得生活变得复杂.这是一个有效的问题,但除了"一个扩展名是从最后一个点到名称末尾的字符串"以外的任何内容都非常充满 - 或者需要解释扩展的含义,

请注意,O/S或文件系统级别的Unix不关心文件的扩展名.程序可以决定他们关心扩展,但这取决于程序.扩展名是文件类型的指示符; 它不是确定的.这就是file程序存在以识别文件内容的原因.它查看文件的内容以识别内容; 它没有注意文件扩展名(因此它不必决定扩展名是什么).

  • @JonathanLeffler此外,你如何处理这个案例是`.tar.gz == .tgz`?这是特定于域的,并且试图在文件系统API中捕获这种任意语言是无稽之谈.我宁愿在机器级别取消文件扩展名,只是将它们留给用户可以帮助识别文件类型的东西. (3认同)

Mat*_*ert 7

有人想要知道文件扩展名的原因是他想知道文件的类型(或其他一些元数据),对吧?

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

所以我想说,节点的方式path.extname正确的.

返回路径的扩展名,从最后一个'.' 到路径的最后部分的字符串结尾.如果没有'.' 在路径的最后一部分或它的第一个字符是'.',然后它返回一个空字符串.


这里有两个不同的东西:

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

  • 另一方面,Dotfiles只是ls来自unix类系统的隐藏文件(前面有一个普通的名字和一个点,使它们不可见) .所以.gitignore只是一个名为 gitignore 的文件并标记为隐藏 - 这里没有扩展名.