文件夹名称中包含点(。)是否不好?带有多个点的文件名如何?


28

有时,文件夹名称中包含点(。)很有实际意义。例如,您要存储在L = 0.5进行的实验的数据。因此,该文件夹可能命名为:

experiment_L0.5

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

file_L0.5.txt

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

谢谢!


5
如果点是第一个字符,则文件夹将被隐藏。除此之外,我认为这并不重要。
user3121023 2014年

Answers:


37

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

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

在Ubuntu中,以点开头的文件或文件夹名称(例如.experiment_L0.5)会使文件或文件夹隐藏。您可以通过在Nautilus中按Ctrl+ 切换隐藏文件的显示H。在Windows中,文件名以开头。没有隐藏。因此,如果您将一个名为.experiment_L0.5Windows 的隐藏文件传输到Windows系统中,则该文件将清晰可见。

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

参考:Wiki关于文件名

希望这可以帮助。


4
这是对的。如果您与Windows共享文件,则必须避免:在Windows文件名中使用冒号char(这是非法的),这会造成问题(确实如此)。另请参阅此处
Rmano 2014年

谢谢@Rmano。我在回答中添加了指向Wiki的链接。
user68186

1
说到兼容性,我认为fname.Windows也不允许尾随点(例如)。
Rmano 2014年

再次感谢@Rmano。我进行了一些快速测试,但未能创建test.Windows中命名的文件。我将更新我的答案。
user68186 2014年

1
要添加到Rmano的评论中-如果您具有通过VirtualBox挂载的Windows驱动器,则在Ubuntu上可能是个问题。尝试将mkdir命名为带尾随点的名称失败,并显示“协议错误”。
bvanlew

11

简短的答案

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

长答案

技术背景:文件系统

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

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

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

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

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

vim /home

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

但是,其他文件系统则有所不同。FAT16和FAT32使用了所谓的“文件分配表”。这意味着存在一个表,该表包含文件中存储的所有文件,它们在此开始“集群”,并在单个集群结束于单个集群。

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

技术背景:文件类型

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

有关


您对FAT如何存储文件名的猜测不太正确:en.wikipedia.org/wiki/FAT32#File_Allocation_Table-实际的“ FAT”存储群集列表,而目录存储的文件名列表带有指向第一个群集的指针一个文件,类似于您描述ext4的方式。:)另外,.txt.html文件确实有不同的“魔力值” -尝试重命名一个HTML文件test.txt并运行file test.txt。它与原始问题没有太大关系,但仍然:)
Sergey 2014年

1
谢谢,我删除了有关FAT的错误部分。关于魔术值和filefile不仅使用魔术值来确定文件的类型。每个有效的HTML文件都是一个文本文件(就其确实包含可读字符而言),但并非每个有效的文本文件都是一个有效的HTML文件(就其针对W3C验证程序进行验证而言)。因此,很多文件类型(html,xml,csv,js,php,c,h,cpp等)实际上都是文本文件。只有二​​进制文件的魔术字节位于明确定义的位置。我上面命名的所有文件在内容之前都可以具有任意空格。
马丁·托马

5

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

  • . 指当前目录
  • .. 指上级目录

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


好点子。这适用于Windows和Ubuntu。
user68186 2014年

1

没关系,无论是在Linux中还是在Windows中。

通常有一个名为“ program.d”的文件夹-保存程序的配置和内容(在/ etc目录中查看)


0

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

有关使用.文件名(周期),我认为这应该是罚款,这似乎并没有成为一个“保留”字符在任何系统(除适用于OpenVMS,MS-DOS和Windows的地方使用允许使用文件/目录名称,但最后一次出现将被解释为VMS,MS-DOS和Windows中的扩展名分隔符),如以下Wikipedia链接所述:

在其他系统中,通常将其视为文件名的一部分,并且可以允许多个句点。在Unix中,前置时间表示文件或文件夹通常处于隐藏状态。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.