区分大小写确定在文件名或目录中是将大写 (FOO.txt) 和小写 (foo.txt) 字母作为不同项(区分大小写)还是等效项(不区分大小写)进行处理。
- 区分大小写:FOO.txt ≠ foo.txt ≠ Foo.txt
- 不区分大小写:FOO.txt = foo.txt = Foo.txt
Windows 和 Linux 区分大小写之间的差异
使用 Linux 和 Windows 文件和目录时,可能需要调整区分大小写的处理方式。
标准行为:
Windows 文件系统将文件和目录名称视为不区分大小写。 FOO.txt 和 foo.txt 将被视为等效文件。
Linux 文件系统将文件和目录名称视为区分大小写。 FOO.txt 和 foo.txt 将被视为不同文件。
Windows 文件系统支持使用属性标志按目录设置区分大小写。 虽然标准行为是不区分大小写,但你可以分配属性标志来使目录区分大小写,以便它能够识别可能仅大小写不同的 Linux 文件和文件夹。
在将驱动器装载到适用于 Linux 的 Windows 子系统 (WSL) 文件系统时,尤其如此。 在 WSL 文件系统中工作时,运行的是 Linux,因此默认情况下,文件和目录被视为区分大小写。
! ◯ \textcircled ! !◯备注
在过去,如果文件的名称仅大小写不同,则 Windows 将无法访问这些文件,因为 Windows 应用程序将文件系统视为不区分大小写,并且无法区分名称仅大小写不同的文件。 虽然 Windows 文件资源管理器将同时显示这两个文件,但无论你选择哪一个文件,都只会打开一个文件。
更改文件和目录的区分大小写
以下步骤说明如何更改 Windows 文件系统上的目录,使其区分大小写,并能识别仅大小写不同的文件和文件夹。
⚠警告
某些 Windows 应用程序(假定文件系统不区分大小写)不使用正确的大小写来引用文件。 例如,应用程序将文件名转换为全部使用大写或小写的情况并不罕见。 在标记为区分大小写的目录中,这意味着这些应用程序将无法再访问这些文件。 此外,如果 Windows 应用程序在使用区分大小写的文件的目录树中创建新目录,则这些目录不区分大小写。 这可能会导致难以在区分大小写的目录中使用 Windows 工具,因此,在更改 Windows 文件系统区分大小写设置时要小心谨慎。
检查当前区分大小写
若要检查 Windows 文件系统中的目录是否区分大小写,请运行以下命令:
fsutil.exe file queryCaseSensitiveInfo <path>
将 <path>
替换为文件路径。 对于 Windows (NTFS) 文件系统中的目录,<path>
将如下所示:C:\Users\user1\case-test
,如果你已位于 user1 目录中,则可以直接运行:fsutil.exe file setCaseSensitiveInfo case-test
修改区分大小写
自 Windows 10 内部版本 17107 开始,支持按目录区分大小写。 在 Windows 10 内部版本 17692 中,支持已更新,以包括从 WSL 内检查和修改目录的区分大小写标志。 使用名为 system.wsl_case_sensitive
的扩展属性公开区分大小写。 对于不区分大小写的目录,此属性的值为 0;对于区分大小写的目录,此属性的值为 1。
更改目录的区分大小写需要运行提升的权限(以管理员身份运行)。 更改区分大小写标志还需要对目录具有“写入属性”、“创建文件”、“创建文件夹”和“删除子文件夹和文件”权限。 有关这方面的更多信息,请参阅疑难解答部分。
若要更改 Windows 文件系统中的目录,使其区分大小写 (FOO ≠ foo),请以管理员身份运行 PowerShell 并使用以下命令:
fsutil.exe file setCaseSensitiveInfo <path> enable
若要将 Windows 文件系统中的目录更改回默认设置不区分大小写 (FOO = foo),请以管理员身份运行 PowerShell 并使用以下命令:
fsutil.exe file setCaseSensitiveInfo <path> disable
目录必须为空,才能更改该目录的区分大小写标志属性。 对于包含其名称仅大小写不同的文件夹/文件的目录,不能禁用区分大小写标志。
区分大小写的继承性
创建新目录时,这些目录将继承其父目录的大小写区分设置。
⚠警告
在 WSL 1 模式下运行时,此继承策略会出现异常。 当发行版在 WSL 1 模式下运行时,不会继承每个目录的区分大小写标志;在区分大小写的目录中创建的目录不会自动区分大小写。 必须将每个目录显式标记为区分大小写
示例
1. 开启 “适用于 Linux 的 Windows 子系统”
2. 重启计算机
3. 使用命令提示符
启用 区分大小写
命令提示符
要以管理员身份运行
。
启用
fsutil.exe file setCaseSensitiveInfo "F:\sim-linux\case-test" enable
如果出现下面问题 “拒绝访问。”
,请尝试到其他目录下去执行如:
此应用无法在你的电脑上运行
若要找到适用于你的电脑的版本,请咨询软件发布者。
C:\Users\admin>fsutil.exe file setCaseSensitiveInfo "F:\sim-linux\case-test"
拒绝访问。
C:\Users\admin>d:
D:\>fsutil.exe file setCaseSensitiveInfo "F:\sim-linux\case-test"
已启用目录 F:\sim-linux\case-test 的区分大小写属性。
D:\>
查看
fsutil.exe file queryCaseSensitiveInfo "F:\sim-linux\case-test"
禁用
fsutil.exe file setCaseSensitiveInfo "F:\sim-linux\case-test" disable
注意: 禁用前先删除
或排除
大小写有区别的条目
。再执行如下操作,否则会有如下报错
C:\Users\admin>fsutil.exe file setCaseSensitiveInfo "F:\sim-linux\case-test" disable
错误: 该目录包含仅名称大小写有区别的条目。
4. 创建 只有大小写不一样文件/文件夹
如果以下错误
C:\Users\Administrator>fsutil.exe file setCaseSensitiveInfo "H:\sim-linux\case-test" enable
错误: 不支持该请求。
注意:请检测Windows 功能“适用于 Linux 的 Windows 子系统” 是否开启。
或启用后是否重启计算机