dotfiles有文件扩展名吗?

时间:2015-08-24 02:58:29

标签: filenames file-extension dotfiles

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

我正在尝试在PHP中实现一些实用程序函数,这是因为做错事而臭名昭着,我注意到PHP的pathinfo函数认为dotfiles有文件扩展名而没有文件名,而节点的{{1}认为dotfiles有一个文件名而没有扩展名。

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

3 个答案:

答案 0 :(得分: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的延伸。将整个gzipped tar文件的扩展名定义为.tar.gz会引发问题"为什么不是.76.tar.gz"并且还意味着您需要重新访问SCCS文件命名约定。将名称的.76部分吸引到.76.tar.gz.76.tar作为后缀会使生活变得复杂。这是一个有效的问题,但除了"扩展名以外的任何内容都是从最后一个点到名称末尾的字符串"确实很充实 - 或者需要解释扩展的含义,并进入另一个通常最好避免的复杂领域。

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

答案 1 :(得分:3)

我觉得我必须给出解决用户实际问题的答案。

在这种情况下,您实际需要扩展名是什么? import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; public class Hex { public static void binaryToHex(InputStream is, OutputStream os) { Writer writer = new BufferedWriter(new OutputStreamWriter(os)); try { int value; while ((value = is.read()) != -1) { writer.write(String.format("%02X", value)); } writer.flush(); } catch (IOException e) { System.err.println("An error occurred"); } } public static void hexToBinary(InputStream is, OutputStream os) { Reader reader = new BufferedReader(new InputStreamReader(is)); try { char buffer[] = new char[2]; while (reader.read(buffer) != -1) { os.write((Character.digit(buffer[0], 16) << 4) + Character.digit(buffer[1], 16)); } } catch (IOException e) { System.err.println("An error occurred"); } } } .gitignore等文件与文件的全名匹配。不是&#34;扩展&#34; (或缺少)但全名。

我会争辩说要取消任何文件扩展名的检查,并检查文件的名称。例如,在PHP中:

.htaccess

答案 2 :(得分:3)

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

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

最后,Unix / Linux从来都不关心后缀 - 大多数程序都能读取“他们的”文件,而不会在其中转发。相反,Unix经常使用来自“magic”文件(/ etc / magic)和file命令的测试来阻止文件类型。 (值得注意的例外是压缩程序,如gzipbzip2,它用带后缀的压缩版本替换原始文件。)

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