不区分大小写的文件系统如何同时显示大小写文件名?


12

前几天,当我在开发项目时就想到了这个问题,该项目依赖于文件名方面的自以为是的框架。框架(此处不相关)想要查看大写优先的文件名。这让我开始思考。

上不区分大小写的文件系统,说extFAT或HFS +(具体不区分大小写)如何在文件系统提供访问相同的文件两者的文件名的上部和下部壳体的版本。

例如:

$ cd ~/Documents
$ pwd
/home/derp/Documents

$ cd ../documents
$ pwd
/home/derp/documents

$ cd ../docuMents
$ pwd
/home/derp/docuMents

$ cd ../DOCUMENTS
$ pwd
/home/derp/DOCUMENTS

$ cd ../documentS
$ pwd
/home/derp/documentS

所有这些命令将解析到同一目录。这种行为(特别pwdbash在这种情况下只是一个函数的输出)只是向我展示了它想看到的内容吗?

另一个例子:

$ ls ~/Documents
Derp.txt    another.txt    whatThe.WORLD

此处的文件系统报告由用户或程序创建的原始文件名的情况。

在文件系统堆栈中的什么时候保留了可读的文件名(例如,大写和小写),以便可以通过正确的大写和小写ASCII字符的任意组合来访问它?这只是某个地方的正则表达式把戏,还是还有其他事情发生?

编辑:经过更多研究后,似乎在保留大小写不区分大小写的文件系统中发现了我好奇的行为...


不写这个作为答案,因为我现在还不确定,但是我相信您不能在该文件系统中使用〜/ Documents和〜/ documents。但是,当您cd〜/ Documents或〜/ documents时,您回想起相同的位置,而外壳通过记住您键入的内容在“玩得很好”。另一面是,某些FS存储了在aux中创建它的方式。大块数据。例如,将〜/ Documents存储在查找表中,但以〜/ documents的形式写入FS。基本上是一种幻觉,即文件系统不在乎大小写。
coteyr

根据我的观察,如果目录包含两个文件名(大小写除外)相同,则不区分大小写的文件系统可以通过任意选择一个来响应对给定文件的请求。如果在创建文件后更改了大写/小写转换的规则,则会出现这种情况。
supercat 2015年

有关NTFS的大小写性质的很酷的信息:superuser.com/questions/364057/why-is-ntfs-case-sensitive
Canadian Luke

Answers:


14

不区分大小写的文件系统仅表示只要文件系统必须询问“ A是否与B引用相同的文件/目录?” 它比较文件/目录的名称,忽略大写/小写的差异(确切地说,大写/小写差异的数量取决于文件系统;一旦超出ASCII,它就不明显了)。区分大小写的文件系统不会忽略这些差异。

保留大小写的文件系统存储给定的文件名。不保留大小写的文件系统则不会;通常会在存储它们之前将所有字母都转换为大写(理论上,它可以使用小写或RaNsOm NoTe大小写,或其他任何形式,但AFAIK所有现实世界中的字母都使用大写)。

您可以将这两个属性任意组合在一起。我不确定是否可以找到不区分大小写的区分大小写的文件系统,但是您当然可以创建一个。但是,所有其他组合在真实系统中都存在或存在。

因此,保留大小写,不区分大小写的文件系统(当今最常见的不区分大小写的文件系统类型)将以您创建或最后重命名的大小写形式存储和返回文件名,但是在比较两个文件名时(检查是否一个文件名)存在,打开一个,删除一个,等等),它将忽略大小写差异。

当您在Unix机器上使用不区分大小写的文件系统时,各种实用程序会做一些奇怪的事情,因为Unix传统上使用区分大小写的文件系统,因此它们并不期望Document1并且document1是同一文件。

在这种pwd情况下,您看到的是默认情况下它仅输出您实际用于获取目录的路径。因此,如果您通过到达那里cd DirName,它将DirName在输出中使用。如果您通过到达那里DiRnAmE,您将DiRnAmE在输出中看到。Bash通过在$PWD环境变量中跟踪您如何到达当前目录来做到这一点。主要是用于符号链接(如果您cd进入符号链接pwd,即使它实际上不是当前目录路径的一部分,您也会在符号中看到符号链接)。但这也使您在不区分大小写的文件系统上观察到有些奇怪的行为。我怀疑这pwd -P会使用存储在磁盘上的大小写为您提供目录名称,但尚未经过测试。


我可能已经知道您击败了我!(已投票)
Fabby 2015年
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.