有时文件夹名称包含点 ( .
) 是有实际意义的。例如,您要存储以 L=0.5 进行的实验的数据。因此文件夹可能被命名为:
experiment_L0.5
文件名也可能出现类似的问题。例如:
file_L0.5.txt
在 Ubuntu 上工作,这是不好的做法吗?与 Windows 用户共享这些目录怎么样?
答案1
据我所知,使用一个或多个点来命名文件夹和文件没有问题。
Ubuntu 通常不使用点和三个字符(例如 .txt)来标识文件类型。因此这在 Ubuntu 上下文中没有特殊含义。这在与 Windows 共享文件时很有用。Ubuntu 使用神奇数字在文件的前几个字节中,使用魔法数字来识别文件类型。但是,如果可以使用点和三个字符的扩展名来识别文件类型,Nautilus 会忽略魔法数字。此设置可以更改。请参阅 强制 nautilus 忽略扩展
在 Ubuntu 中,以点开头的文件或文件夹名称(例如 ).experiment_L0.5
会使文件或文件夹隐藏。您可以在 Nautilus 中按Ctrl+来切换隐藏文件的显示H。在 Windows 中,以 开头的文件名称.
不会被隐藏。因此,如果您将名为 的隐藏文件传输.experiment_L0.5
到 Windows 系统中,它将清晰可见。
在 Ubuntu 中,文件名可以以点结尾,因为放在结尾没有特殊含义。然而,在 Windows 中,一个点将文件名和扩展名分开,不允许以点结尾但没有扩展名的文件名。当我尝试在 Windows 中创建这样的文件时,我得到的文件只有名称,没有点,也没有扩展名。
参考:文件名 Wiki
希望这可以帮助。
答案2
简短的回答
- Windows 不允许使用以下字符
<>:"/\|?*
:(来源) - 不建议使用的字符包括:空格
和点
.
(来源)- 当名称中有空格时,命令行工具会更难使用(更难,但并非不可能)
- 点用于正则表达式(例如,当您想要使用 时
grep
)。在 Linux 中,按照惯例,以点开头的文件会隐藏。在 Windows 中,点用于文件扩展名,用于文件类型检测。
- Windows也不允许文件名
CON
,PRN
,AUX
,CLOCK$
,NUL
COM1
,COM2
,COM3
,COM4
, , , , , ,COM5
, , ,和. (COM6
COM7
COM8
COM9
LPT1
LPT2
LPT3
LPT4
LPT5
LPT6
LPT7
LPT8
LPT9
来源) - 据我所知,Unix文件系统中唯一不允许使用的字符是
/
和空(空字节,\0
)。 - 也可以看看:文件系统限制(我不知道您想要兼容哪个 Windows)。
详细答案
技术背景:文件系统
Ubuntu 利用ext4
文件系统。文件系统跟踪文件在底层存储(磁盘或 SSD 或其他)上的存储位置,所有者/组/其他人可以读取/写入/执行、时间戳、名称等形式的权限。
文件系统构造可用的存储。第一个块称为“超级块”。此块用于挂载文件系统。据我所知,每个现代文件系统都将其空间划分为块。我认为(但我不太确定)大多数文件系统也具有固定的块大小,尽管可以在创建文件系统时配置块大小。ext4(以及 ext2 和 ext3)使用所谓的“inode”来存储文件和目录。这些 inode 包含指向其他块(也可能是 inode 或“数据块”)的指针。文件的“第一个”inode 包含我上面提到的所有信息。
另一个信息是文件的“类型”。“类型”可以是:
- 常规文件
- 目录
- 设备文件(块或字符设备)
- ...
事实上,你也可以用编辑器打开目录:
vim /home
由于目录不包含完整路径,而只包含内容名称,因此我看不出文件不能包含 的原因/
。我猜这可能是为了方便。(有人知道为什么/
不允许吗?)
但是,其他文件系统的情况有所不同。FAT16 和 FAT32 使用所谓的“文件分配表”。这意味着有一个表包含存储在您的文件上的所有文件,它们以单链表的形式从哪个“簇”开始,在哪个簇结束。
我想告诉你的重要一点是,不允许的字符可能也取决于文件系统。
技术背景:文件类型
- Windows 使用文件扩展名来检测文件类型
- Linux 使用“魔字节”来检测文件类型。魔法字节是文件内容的一部分,因此与名称完全无关。这些字节是文件类型规范的一部分(请参阅png 规范作为示例)。它还使用具有相同魔法字节的文件的文件扩展名,例如
.txt
或.html
(两者都是文本文件)。
有关的
答案3
为了完整起见,仅由一个点.
或两个点组成的名称..
是特殊的:
.
指的是当前目录..
引用父目录
这些条目会自动添加并始终存在,因此您不能拥有名为.
或 的文件..
。
答案4
在 Unix、Linux 文件系统中,文件命名非常灵活。唯一不能使用的文件名是无效的字符或名称中包含 的字符/
。但从名称可移植性的角度来看,避免使用其他系统中禁止/保留的字符肯定是一个好习惯;例如," * : < > ? \ / |
如果您想在 Windows 系统中访问文件,则不应在文件名中使用任何字符(受 NTFS 限制)。
和.
关于在文件名中使用(句点),我认为这应该没问题,因为它似乎不是一个“预订的”字符在任何系统中都是如此(OpenVMS、MS-DOS 和 Windows 除外,在这些系统中允许在文件/目录名称中使用它,但最后一次出现将被解释为 VMS、MS-DOS 和 Windows 中的扩展分隔符),如以下 Wikipedia 链接中所述:
在其他系统中,通常将其视为文件名的一部分,并且可以允许多个句点。在 Unix 中,以句点开头表示文件或文件夹通常是隐藏的。