dotfiles (如.htaccess .gitignore和.config )是否有文件扩展名而没有文件名,或者它们是否被认为具有文件名和扩展名?
我试图在PHP中实现一些实用函数,这是因为做错事而臭名昭著,我注意到PHP的pathinfo函数认为dotfile有文件扩展名,没有文件名,而节点的path.extname则认为dotfile有文件名,没有扩展名。
我不清楚标准是否存在,或者这是否符合开发人员的偏好。
发布于 2015-08-24 03:07:19
你支付你的钱,你选择:是的,不,也许吧。
这取决于你对“扩展”的定义。
请记住,SCCS文件使用了前缀s. (除其他外,您还会看到p.文件--还有许多带有其他前缀的临时文件名)。SCCS文件s.something是否有扩展名或前缀?(对于s.source.c,它是相当直截了当的;有前缀、名称和扩展名或后缀,或者您可以忽略前缀作为特例,名称是s.source,扩展名是.c。)默认的可执行文件名a.out呢?像..dot这样的名字怎么样?它有扩展名吗?如果有,它是什么?
请注意,DOS上的答案更加形式化了。在那里,用于强制使用8.3的文件系统名称(以前是一个千年左右),其扩展是有形的。但在大多数情况下,这是一个已经过去的时代(而且几乎没有人怀念它)。
Anthony Arnold和paxdiablo都注意到以.tar.gz结尾的名称存在--这些文件的扩展名是什么?
如果您将somecode-8.76.tar.gz的扩展视为.gz以外的任何东西,那么您就是在向一个袋子‘O’蠕虫敞开心扉。包含的文件是somecode-8.76.tar;可以合理地说它本身有一个.tar扩展名。将整个gzipped tar文件的扩展名定义为.tar.gz提出了“为什么不是.76.tar.gz”的问题,也意味着您需要重新访问SCCS文件命名约定。将名称的.76部分作为后缀吸收到.76.tar.gz或.76.tar中,确实会使生活变得复杂。这是一个有效的问题,但除了“扩展名是从最后一个点到名称末尾的字符串”之外的任何事情都是令人忧虑的--或者需要解释扩展的含义,并且进入另一个复杂的领域,这通常是最好避免的。
注意,O/S或文件系统级别的Unix并不关心文件的扩展名。程序可以决定他们是否关心扩展,但这取决于程序。扩展名是文件类型的指示符;它不是确定的。这就是为什么存在file程序来识别文件的内容。它查看文件的内容以标识内容;它不注意文件扩展名(因此它也不必决定扩展名是什么)。
发布于 2015-08-24 03:27:26
有人想知道文件的扩展名是因为他想知道文件的类型(或其他元数据),对吗?
dotfile的名称与其类型无关。在dotfile的第一个点之后的部分是它的名称,没有扩展名。但是一个dotfile也可以有一个扩展名(例如,.mongorc.js或UNIX系统上的一些其他隐藏文件)。
所以我想说,节点的path.extname所做的方式是正确的。
从最后一个'.‘返回路径的扩展。在路径的最后部分结束字符串。如果没有“。”在路径的最后一部分或它的第一个字符'.‘中,它返回一个空字符串。
这里有两种不同的东西:
ls的unix系统的隐藏文件(前面有一个普通名称和一个点,以使它们不可见)。因此,.gitignore只是一个名为gitignore并标记为隐藏的文件,这里没有扩展名。发布于 2015-08-24 03:34:08
我觉得我必须留下一个解决用户实际问题的答案。
在这种情况下,您实际上需要分机做什么?.gitignore、.htaccess等文件与文件的全名相匹配。不是“扩展名”(或缺少),而是全名。
我认为应该取消对文件扩展名的检查,并检查文件名。例如,在PHP中:
basename ("/path/to/.htaccess");https://stackoverflow.com/questions/32173890
复制相似问题