前几天,当我在开发项目时就遇到了这个问题,该项目依赖于文件名方面的自以为是的框架。框架(此处不相关)想要查看大写优先的文件名。这让我开始思考。
上不区分大小写的文件系统,说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
所有这些命令都将解析到同一目录。这种行为(特别pwd
是bash
在这种情况下只是一个函数的输出)只是向我展示了它想看到的内容吗?
另一个例子:
$ ls ~/Documents
Derp.txt another.txt whatThe.WORLD
此处的文件系统报告由用户或程序创建的原始文件名的情况。
在文件系统堆栈中的什么时候保留了可读的文件名(例如,大写和小写),以便可以通过正确的大写和小写ASCII字符的任意组合来访问它?这只是某个地方的正则表达式把戏,还是还有其他事情发生?
编辑:它看起来像我很好奇中发现的行为的情况下保留后一些调查研究不区分大小写的文件系统......
不区分大小写的文件系统仅表示只要文件系统必须询问“ A是否与B引用相同的文件/目录?” 它比较文件/目录的名称,忽略大写/小写的差异(确切地说,大写/小写的差异计数取决于文件系统,一旦超出ASCII,它就变得不明显了)。区分大小写的文件系统不会忽略这些差异。
保留大小写的文件系统存储给定的文件名。不保留大小写的文件系统则不会;通常会在存储它们之前将所有字母都转换为大写(理论上,它可以使用小写或RaNsOm NoTe大小写,或其他任何形式,但AFAIK所有现实世界中的字母都使用大写)。
您可以将这两个属性任意组合在一起。我不确定是否可以找到不区分大小写的区分大小写的文件系统,但是您当然可以创建一个。但是,所有其他组合在真实系统中都存在或存在。
因此,保留大小写,不区分大小写的文件系统(当今最常见的不区分大小写的文件系统类型)将以您创建或最后重命名的大小写形式存储和返回文件名,但是在比较两个文件名时(检查是否一个文件名)存在,打开一个,删除一个,依此类推),它将忽略大小写差异。
当您在Unix机器上使用不区分大小写的文件系统时,各种实用程序都会做一些奇怪的事情,因为Unix传统上使用区分大小写的文件系统,因此它们并不期望Document1
并且document1
是同一文件。
在这种pwd
情况下,您看到的是默认情况下它仅输出您实际用于获取目录的路径。因此,如果您通过到达那里cd DirName
,它将DirName
在输出中使用。如果您通过到达那里DiRnAmE
,您将DiRnAmE
在输出中看到。Bash通过在$PWD
环境变量中跟踪您如何到达当前目录来做到这一点。主要是用于符号链接(如果cd
进入符号链接pwd
,即使它实际上不是当前目录路径的一部分,您也会在符号中看到符号链接)。但这也使您在不区分大小写的文件系统上观察到一些奇怪的行为。我怀疑这pwd -P
会使用存储在磁盘上的大小写为您提供目录名称,但尚未经过测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句