文件夹名称包含点(。)是不好的做法? 多点的文件名怎么样?

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

experiment_L0.5 

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

 file_L0.5.txt 

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

谢谢!

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

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

在Ubuntu中,使用点(例如.experiment_L0.5启动文件或文件夹名称会使文件或文件夹隐藏。 您可以在Nautilus中按Ctrl + H切换隐藏文件的显示。 在Windows中,文件名以a开头。 没有隐藏。 因此,如果将名为.experiment_L0.5的隐藏文件.experiment_L0.5到Windows系统中,它将清晰可见。

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

参考: 文件名上的Wiki

希望这可以帮助。

简短的回答

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

答案很长

技术背景:文件系统

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

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

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

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

实际上,您还可以使用编辑器打开目录:

 vim /home 

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

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

我想告诉你的重要一点是,不允许的字符也可能依赖于文件系统。

技术背景:文件类型

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

有关

  • 为何是 ‘。’ 选择代表当前目录,’..’代表父目录?
  • 什么是inode有用?
  • EXT2文件系统内部的非技术性外观

为了完整起见,名称只包含一个点. 或两个点..很特别:

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

这些条目会自动添加并始终存在,因此您无法拥有一个名为的文件...

这没关系,不是在linux中,也不是在windows中。

将文件夹命名为“program.d”是一种常见做法 – 保存程序的配置和内容(查看/ etc目录)

在Unix,Linux文件系统中,文件命名非常灵活。 您不能拥有的唯一文件名是字符或其名称中包含/字符。 但从名称可移植性的角度来看,避免使用其他系统中禁止/保留的字符肯定是一种好习惯。 比如,如果要在Windows系统中访问该文件,则不应在文件名中使用任何" * : < > ? \ / |字符(受NTFS限制)。

关于使用. (期间)在文件名中 ,我认为它应该没问题,因为它似乎不是任何系统中的“保留”字符(OpenVMS,MS-DOS和Windows除外,它在文件/目录名称中使用)允许但最后一次出现将被解释为VMS,MS-DOS和Windows中的扩展分隔符,如下面的Wikipedia链接中所述:

  • 文件名:文件名限制的比较

在其他系统中,通常被视为文件名的一部分,并且可以允许多于一个时间段。 在Unix中,前导时段意味着文件或文件夹通常是隐藏的。