文件夹名称包含点 (.) 是不好的做法吗?带有多个点的文件名怎么样?

Ham*_*mid 34 files directory

有时,文件夹名称包含一个点 ( .)是有实际意义的。例如,您正在存储在 L=0.5 下进行的实验的数据。所以文件夹可能被命名为:

experiment_L0.5
Run Code Online (Sandbox Code Playgroud)

文件名可能会出现类似的问题。例如:

file_L0.5.txt
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 中工作,这是不好的做法吗?与 Windows 用户共享这些目录怎么样?

use*_*186 44

据我所知,用单个或多个点命名文件夹和文件没有问题。

Ubuntu 一般不使用点和三个字符(如 .txt)来标识文件类型。所以这在 Ubuntu 上下文中没有特殊意义。这在与 Windows 共享文件时很有用。Ubuntu在文件的前几个字节中使用幻数来识别文件类型。但是,如果点和三个字符的扩展名可用于识别文件类型,Nautilus 将忽略幻数。可以更改此设置。请参阅 强制 nautilus 忽略扩展

在 Ubuntu 中,以点开头的文件或文件夹名称,例如.experiment_L0.5,会使文件或文件夹隐藏。您可以通过在 Nautilus 中按Ctrl+来切换隐藏文件的显示H。在 Windows 中,以 a 开头的文件名.不会被隐藏。因此,如果您将命名的隐藏文件传输.experiment_L0.5到 Windows 系统中,它将清晰可见。

在 Ubuntu 中,文件名可以以点结尾,因为它的末尾没有特殊含义。但是,在 Windows 中,点分隔文件名和扩展名,并且不允许以点结尾但没有扩展名的文件名。当我尝试在 Windows 中创建这样的文件时,我得到了一个只有名称、没有点、没有扩展名的文件。

参考:关于文件名的 Wiki

希望这可以帮助。

  • 这是对的。如果你与 windows 共享文件,你必须避免冒号 `:` 字符,在 windows 文件名中是非法的,这会产生问题([确实如此](https://bugs.launchpad.net/ubuntu/+source/ gnome-screenshot/+bug/1054808))。另见[此处](http://stackoverflow.com/questions/1976007/what-c​​haracters-are-forbidden-in-windows-and-linux-directory-names)。 (5认同)

Mar*_*oma 16

简短的回答

  • Windows不允许下列字符:<>:"/\|?*
  • 不鼓励的更多字符是:空格和点.
    • 当名称中有空格时,命令行工具更难使用(更难,并非不可能)
    • 点在 RegEx 中使用(例如,当您想使用 时grep)。前导点使文件在 Linux 中按照惯例隐藏。在 Windows 中,文件扩展名中使用点,用于文件类型检测。
  • Windows还不会允许文件名CONPRNAUXCLOCK$NUL COM1COM2COM3COM4COM5COM6COM7COM8COM9 LPT1LPT2LPT3LPT4LPT5LPT6LPT7LPT8,和LPT9。(来源
  • 我知道的 Unix 文件系统中唯一不允许的字符是/和 null(空字节,\0)。
  • 另请参阅:文件系统限制(我不知道您要兼容哪个 Windows)。

长答案

技术背景:文件系统

Ubuntu 使用ext4文件系统。文件系统跟踪文件在底层存储(磁盘或 SSD 或其他)上的存储位置,所有者/组/其他形式的权限可以读/写/执行、时间戳、名称。

文件系统构建了可用的存储。第一个块被称为“超级块”。该块用于挂载文件系统。据我所知,每个现代文件系统都以块为单位划分空间。我认为(而且我不太确定)大多数文件系统也有固定的块大小,尽管可以在创建文件系统时配置块大小。ext4(以及 ext2 和 ext3)为文件和目录使用所谓的“inode”。这些 inode 包含指向其他块(也可能是 inode 或“数据块”)的指针。文件的“第一个”inode 包含我上面提到的所有信息。

另一种信息是文件的“类型”。“类型”可以是:

  • 常规文件
  • 目录
  • 设备文件(块或字符设备)
  • ...

事实上,你也可以用编辑器打开目录:

vim /home
Run Code Online (Sandbox Code Playgroud)

由于目录不包含完整路径,而只包含内容的名称,我看不出文件不能包含/. 我想这可能是方便。(有人知道为什么/不允许吗?)

但是,其他文件系统的情况有所不同。FAT16 和 FAT32 使用所谓的“文件分配表”。这意味着有一个表包含存储在您的文件中的所有文件,它们从哪个“簇”开始,在哪个簇作为单链表结束。

我想告诉您的重要一点是,不允许使用的字符也可能取决于文件系统。

技术背景:文件类型

  • Windows 使用文件扩展名来检测文件类型
  • Linux 使用“Magic Bytes”来检测文件类型。Magic Bytes是文件内容的一部分,因此完全独立于名称。这些字节是文件类型规范的一部分(以png 规范为例)。它还为具有相同魔术字节的文件使用文件扩展名,例如.txt.html(两者都是文本文件)。

有关的


Ser*_*gey 6

为了完整起见,仅由一个点.或两个点组成的名称..是特殊的:

  • . 指向当前目录
  • .. 指的是父目录

这些条目是自动添加的并且始终存在,因此您不能拥有名为.或的文件..