问题描述
有时,文件夹名称包含点 (.
) 是有意义的。例如,您正在存储在 L=0.5 下进行的实验的数据。因此该文件夹可能被命名为:
experiment_L0.5
文件名可能会出现类似的问题。例如:
file_L0.5.txt
在 Ubuntu 中工作,这是不好的做法吗?与 Windows 用户共享这些目录怎么样?
最佳回答
据我所知,用单个或多个点命名文件夹和文件没有问题。
Ubuntu一般不使用点和三个字符(如.txt)来标识文件类型。所以这在 Ubuntu 环境中没有特殊意义。这在与 Windows 共享文件时很有用。 Ubuntu 在文件的前几个字节中使用幻数来识别文件类型。但是,如果点和三个字符扩展名可用于识别文件类型,Nautilus 会忽略幻数。该设置可以更改。参见Force nautilus to ignore extensions
在 Ubuntu 中,以点开头的文件或文件夹名称(例如 .experiment_L0.5
)会使文件或文件夹隐藏。您可以通过在 Nautilus 中按 Ctrl
+ H
来切换隐藏文件的显示。在 Windows 中,前面以 .
开头的文件名不会被隐藏。因此,如果您将名为 .experiment_L0.5
的隐藏文件传输到 Windows 系统中,它将清晰可见。
在 Ubuntu 中,文件名可以以点结尾,因为它末尾没有特殊含义。但是,在 Windows 中,文件名和扩展名之间用点分隔,不允许以点结尾但没有扩展名的文件名。当我尝试在 Windows 中创建这样的文件时,我得到的文件只有名称,没有点,没有扩展名。
希望这可以帮助。
次佳回答
简短的回答
-
Windows 不允许使用以下字符:
<>:"/\\|?*
( source ) -
更多不鼓励使用的字符有:空格
和点
.
( source )\n\n-
当名称中有空格时,命令行工具会更难使用(更难,但并非不可能)
-
点在正则表达式中使用(例如,当您想使用
grep
时)。在 Linux 中,按照惯例,前导点会使文件隐藏。在Windows中,点用于文件扩展名,用于文件类型检测。
-
-
Windows 也不允许文件名 CON、PRN、AUX、CLOCK$、NUL\nCOM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9\nLPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 、LPT9。 (source)
-
据我所知,Unix 文件系统中唯一不允许的字符是
/
和 null (空字节,\\0
)。 -
另请参阅:File system limits(我不知道您想要兼容哪些Windows)。
长答案
技术背景:文件系统
Ubuntu 使用 ext4
文件系统。文件系统跟踪文件存储在底层存储(磁盘或SSD或其他)上的位置,所有者/组/其他形式的权限可以读/写/执行,时间戳,名称。
文件系统构造可用存储。第一个块称为 “superblock”。该块用于挂载文件系统。据我所知,每个现代文件系统都将其空间划分为块。我认为(我对此不太确定)大多数文件系统也有固定的块大小,尽管可以在创建文件系统时配置块大小。 ext4(以及 ext2 和 ext3)对文件和目录使用所谓的 “inodes”。这些 inode 包含指向其他块的指针(也可能是 inode 或 “data blocks”)。文件的 “first” inode 包含我上面提到的所有信息。
另一项信息是文件的 “type”。 “Type” 可以是:
-
常规文件
-
目录
-
设备文件(块或字符设备)
-
…
事实上,您也可以使用编辑器打开目录:
vim /home
由于该目录不包含完整路径,而仅包含内容的名称,因此我看不出文件不能包含 /
的原因。我想这可能是为了方便。 (有人知道为什么不允许 /
吗?)
然而,对于其他文件系统来说情况有所不同。 FAT16 和FAT32 使用所谓的“文件分配表”。这意味着有一个表包含存储在文件中的所有文件,它们以单链表的形式从 “cluster” 开始,在哪个簇结束。
我想告诉您的重要事情是不允许的字符也可能取决于文件系统。
技术背景:文件类型
-
Windows 使用文件扩展名来检测文件类型
-
Linux 使用 “Magic Bytes” 来检测文件类型。 Magic Bytes 是文件内容的一部分,因此完全独立于名称。这些字节是文件类型规范的一部分(请参阅 png specification 作为示例)。它还使用具有相同魔术字节的文件的文件扩展名,例如
.txt
或.html
(两者都是文本文件)。
Related
第三种回答
为了完整起见,仅由单个点 .
或两个点 ..
组成的名称是特殊的:
-
.
指当前目录 -
..
指的是父目录
这些条目会自动添加并始终存在,因此您不能拥有名为 .
或 ..
的文件。