让Cygwin用上大小写敏感的文件系统

通常来说Windows下文件(夹)的名字都不分大小写的,你能看出大小写,但是实际上在编程的时候输入大写小写都能访问,并且就算大小写不同也不能保存两个一样名字的文件(夹)。

对于Cygwin来说这就是个大问题了。因为Linux下文件名是区分大小写的,所以在不分大小写的文件系统下有可能编译一些程序的时候出现错误。Windows的API不区分大小写,但是NTFS文件系统是区分的,我们可以通过更改注册表实现Cygwin下文件名区分大小写。

首先更改注册表,把这个键的值改为0(dword:00000000)

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive

然后更改Cygwin的自动挂载

vim /etc/fstab

所有posix=0改成posix=1。
类似这样:

none                    /cygdrive       cygdrive        binary,posix=1,user             0 0
C:                      /cygdrive/c     ntfs            binary,posix=1,user,auto        0 0
D:                      /cygdrive/d     ntfs            binary,posix=1,user,auto        0 0
D:\Project              /project        ntfs            binary,posix=1,user,auto        0 0

然后重启即可。
重启后你再运行Cygwin,你会发现不能大小写混用了。

Howard@Howard-Pad /project
$ ls
apt-cyg              Shadowsocks-FrontStage      Shadowsocks-Windows
*****tai Downloader  Opauth-TencentQQStrategy    UUMS
ixlab_adminer        PHP Public Library          WNDR3800
IXNetwork            Scripts                     MoeNetwork           

Howard@Howard-Pad /project
$ cd Apt-Cyg
-bash: cd: Apt-Cyg: No such file or directory

Howard@Howard-Pad /project
$ cd apt-cyg

Howard@Howard-Pad /project/apt-cyg
$

参考自这篇问答