网站搜索

为什么某些 Windows 文件和文件夹名称前面有一个点?


虽然我们大多数人只是在 Windows 系统上看到普通的文件和文件夹名称,但其他人可能会遇到一些更出乎意料的事情——文件和文件夹名称前面有一个点。为什么会这样?今天的 SuperUser Q&A 帖子回答了一位非常好奇的读者的问题。

今天的问答环节由 SuperUser 提供 - Stack Exchange 的一个分支,一个由社区驱动的问答网站分组。

照片由 Domiriel (Flickr) 提供。

问题

超级用户 Niko Bellic 想知道为什么某些 Windows 文件和文件夹名称前面有一个点:

例如,在我的 Windows 系统的 My Documents 目录中,我发现了以下文件夹:

  • .ssh
  • .颠覆

这是我不知道的某种命名约定吗?

为什么某些 Windows 文件和文件夹名称前面有一个点?

答案

超级用户贡献者 graity 为我们提供了答案:

这种命名约定来自类 Unix 操作系统(例如 Linux 或 OSX),它表示隐藏文件目录。它可以在任何地方使用,但它的主要用途是将配置文件隐藏在您的主目录中(即 ~/.cache/ 或 ~/.plan)它们通常被称为 点文件 .

点文件 在某种程度上可以称为传统的 Unix,等同于 Windows 上的 AppData 目录。同时,许多 Linux 程序正在更改以遵循 XDG 基本目录规范,将它们的配置移动到 ~/.config/ 并将其他数据移动到 ~/.cache/ 和 < em>~/.local/share/。这使得它更类似于 AppData\RoamingAppData\Local

你在 Windows 上有这些 .ssh.subversion 目录是因为你使用了一些程序(特别是 OpenSSH 和 Subversion),这些程序被移植为使用 Windows 系统 API 而不是 POSIX的,但尚未针对其他一些 Windows 约定进行调整。

有时会故意跳过这种改编,以使在 Windows 系统上使用类 Unix 环境(例如 Cygwin)的人们的生活更轻松。例如,Cygwin 安装了一组标准的类 Unix 工具,如 ls,它会忽略 Windows 隐藏标志,并且只接受 点文件 名称.如果在同一位置共享个人的 Windows 和 Linux/BSD/OSX 计算机之间的配置同步也更容易。

这些文件通常位于用户的主目录中(即 Linux 上的 /home/name/.sshC:\Users ame\.ssh 在 Windows 7 及更高版本上)。将它们放在 DocumentsMy Documents 子目录中是相当罕见的(毕竟它们不包含文档)。

正如 Rob Pike 在 Google+ 上所写,这是一个偶然的特征:

很久以前,在制定 Unix 文件系统的设计时,出现了条目 ... 以使导航更容易。我不确定,但我相信 .. 在文件系统变得分层时在版本 2 的重写期间进入(它在早期具有非常不同的结构)。但是,当键入 ls 时,这些文件就会出现,因此 Ken 或 Dennis 向程序添加了一个简单的测试。当时是在汇编程序中,但有问题的代码等同于这样的东西:

  • if (name[0] == ‘.’) 继续;

该声明比应有的要短一些,即:

  • if (strcmp(name, “.”) == 0 || strcmp(name, “..”) == 0) 继续;

但是,嘿,这很容易,结果有两件事。

首先,开了一个不好的先例。许多其他懒惰的程序员通过进行相同的简化引入了错误。以句点开头的实际文件在应该计算时通常会被跳过。

其次,更糟糕的是,创建了一个隐藏点文件 的想法。结果,更多懒惰的程序员开始将文件放到每个人的主目录中。我用来打字的电脑上没有安装太多软件,但我的主目录有大约一百个 dot 文件,我什至不知道其中大部分是什么,或者它们是否仍然存在需要。通过我的主目录的每个文件名评估都被这个累积的污泥减慢了速度。

有什么要补充的吗?在评论中关闭。想从其他精通技术的 Stack Exchange 用户那里阅读更多答案吗?在此处查看完整的讨论主题。