在 Windows 7 Professional 64 位上运行的 Cygwin 64 位中是否可以实现区分大小写的文件名处理?

在 Windows 7 Professional 64 位上运行的 Cygwin 64 位中是否可以实现区分大小写的文件名处理?

我一直在 Windows 7 Professional 64 位上使用 Cygwin 32 位。我设置了HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ObCaseInsensitive注册表项,一切正常:我可以获得真正的区分大小写的文件名处理,我可以在同一目录中创建FOO.txt和。foo.txt

现在 Cygwin 64 位已经发布,我想在 Windows 7 Professional 64 位上试用一下。结果发现 ObCaseInsensitive 注册表项对 Cygwin 64 位无效,因为该项似乎仅适用于 Win32 子系统。Windows 7 Professional 64 位(需要 Enterprise 或 Ultimate)中也不提供基于 UNIX 的应用程序子系统 (SUA)。事实上,我甚至不知道安装 SUA 是否有用。

有人知道是否可以在 Windows 7 Professional 64 位上使用 Cygwin 64 位实现区分大小写的文件名处理?

答案1

区分大小写在 x86_64-cygwin 上有效。请记住,在 64 位 Windows 系统上,实际上有两个注册表,一个用于 32 位进程,另一个用于 64 位进程。(在 Cygwin 中,它们由/proc/registry32和表示/proc/registry64。)使用 再次设置密钥regtool -w并重新启动应该可以为您解决此问题。

答案2

您可以定义一个函数来检查目标目录的大小写(无需更改 Windows 注册表)。这样,我在~/.bash_functions文件中就有了以下代码:

unset cd_func2 2> /dev/null
unalias cd 2> /dev/null
cd_func2 () {

    echo $1 | grep -q '^/' && cd $1 && return 0
    for f in `echo $1 | sed -e 's/\// /g'` ; do
        _NEW_PATH=$(ls -a | grep -i ^"$f"$)
        [ "$_NEW_PATH" ] && cd $_NEW_PATH && continue
        echo "Directori inexistent $f" && return 1
    done
}

alias cd=cd_func2

编辑:更通用的参数处理。

希望能帮助到你。

相关内容