为Cygwin启用本机NTFS符号链接

为Cygwin启用本机NTFS符号链接,cygwin,mingw,symlink,ntfs,ln,bash,Cygwin,Mingw,Symlink,Ntfs,Ln,Bash,最近的NTFS和Windows实现符号链接: 可以使用linkd或junction工具从NTFS 3.0(Windows 2000)起用作目录符号链接 也可以用作符号链接(用于文件和目录),因为Windows Vista使用了mklink工具 但是在Cygwin1.7(安装在Windows7上)上,ln-s创建一个文本文件 关于Cygwin: $ ln -s -v target mylink `mylink' -> `target' 在MinGW(或您最喜欢的编辑器)上: $cat

最近的NTFS和Windows实现符号链接:

  • 可以使用
    linkd
    junction
    工具从NTFS 3.0(Windows 2000)起用作目录符号链接
  • 也可以用作符号链接(用于文件和目录),因为Windows Vista使用了
    mklink
    工具
但是在Cygwin1.7(安装在Windows7上)上,
ln-s
创建一个文本文件

关于Cygwin:

$ ln -s -v target mylink
`mylink' -> `target'
在MinGW(或您最喜欢的编辑器)上:

$cat mylink
!ÿþt a r g e t
可以告诉Cygwing使用或吗?

其他问题:这在MinGW上可用吗?

⸻⸻⸻  简短回答 ⸻⸻⸻ 定义环境变量:

CYGWIN=winsymlinks:nativestrict
正如所指出的,您可能还必须以管理员身份运行

⸻⸻⸻  长话短说 ⸻⸻⸻ 默认的Cygwin符号链接只是常规文件 默认情况下,创建文本文件作为解决Windows符号链接缺陷的方法。 这些文件不是真的。 几乎所有Windows程序都不将这些文件视为符号链接

本机符号链接在最新的Windows版本上可用 最近的NTFS和Windows实现符号链接:

  • 可以用作目录符号链接 自NTFS 3.0(Windows 2000)使用
    linkd
    junction
    工具以来
  • 也可以用作符号链接 (用于文件和目录)自Windows Vista使用
    mklink
    工具以来
Cygwin可以创建本机 以下文件的简化摘录:

符号链接 [……]

Cygwin可能以多种不同的方式创建符号链接:

  • 默认符号链接是包含魔法cookie的普通文件 后跟链接指向的路径。[……]

  • 快捷方式样式符号链接是Windows
    .lnk
    […]创建的 如果环境变量CYGWIN[…]设置为包含 字符串
    winsymlinks
    winsymlinks:lnk
    。[……]

  • 本机Windows符号链接仅在Windows Vista/2008及更高版本上创建, 并且仅在支持重分析点的文件系统上。 由于它们奇怪的限制和行为,它们只是被创造出来的 如果用户明确要求创建它们。 这是通过设置环境变量CYGWIN来实现的 要包含字符串
    winsymlinks:native
    winsymlinks:nativestrict
    。 [……]

  • 在NFS文件系统上,Cygwin始终创建真正的NFS符号链接

配置Cygwin 显示变量
CYGWIN
和选项
winsymlinks

CYGWIN
环境变量用于配置许多全局设置[…]。 它包含下面列出的选项,用空白字符分隔。[……]

  • [……]
  • [……]
  • [……]
  • [……]
  • winsymlinks:{lnk,native,nativestrict}
    - 如果设置为仅
    winsymlinks
    winsymlinks:lnk
    ,Cygwin将创建符号链接 作为带有特殊标题和R/O属性集的Windows快捷方式

    如果设置为
    winsymlinks:native
    winsymlinks:nativestrict
    , Cygwin在文件系统上将符号链接创建为本机Windows符号链接 以及支持它们的操作系统版本。如果已知操作系统不支持 本机符号链接(Windows XP、Windows Server 2003),警告消息 每个会话生成一次

    winsymlinks:native
    winsymlinks:nativestrict
    是否为:如果文件系统支持本机 符号链接和Cygwin由于某种原因无法创建本机符号链接, 它将退回到使用创建Cygwin默认符号链接
    winsymlinks:native
    ,而使用
    winsymlinks:nativestrict
    symlink(2)
    系统调用将立即失败

CYGWIN=winsymlinks:native始终创建链接,但在目标不存在时使用CYGWIN回退
关于Cygwin:

$ ln -s -v target mylink
`mylink' -> `target'
$export CYGWIN=“winsymlinks:native”
$ln-s-v目标mylink
`mylink'->'目标'
$echo内容>目标
关于MinGW:

$cat mylink
内容
在将符号链接创建为虚拟文件时,同时使用Windows和Cygwin程序的用户可能会遇到问题(目标丢失时Cygwin会回退)

CYGWIN=winsymlinks:nativestrict始终使用本机Windows symlink,但当目标不存在时失败
关于Cygwin:

$ ln -s -v target mylink
`mylink' -> `target'
$export CYGWIN=“winsymlinks:nativestrict”
$rm-f a b
$ln-sv a b
ln:无法创建符号链接“b”:没有这样的文件或目录
$touch b
$ln-sv a b
ln:未能创建符号链接“b”:文件存在
$RMB
$touch a
$ln-sv a b
`b'->'a'
由于
nativestrict
要求在创建符号链接之前存在目标,因此在创建链接时,某些命令/脚本可能会失败

注意:只有管理员才能创建本机NT符号链接 因此,在Windows UAC下,Cygwin终端仿真器(mintty) 应以提升的权限运行 (右键单击快捷方式并选择以管理员身份运行。) 或者设置mintty快捷方式属性Advanced→ 以管理员身份运行)


特别感谢和感谢他们的贡献。

您可能正在寻找使用MSYS到达目录树中另一个目的地的方法。有办法。您应该创建一个shell脚本(“*.sh”文件),其中包含以下行:

cd "/drive_letter/SubCatalogue/SubFolder/..." 

因为@olibre的回答对我不起作用。我刚刚创建了一个shell函数

: '
mklink - Create NTFS (Windows) links that is usable by Windows and Cygwin

Usage: mklink [/D | /H | /J] <link-path> <target-path>

Options:
    /D    Directory Symbolic Link
    /H    Hardlink
    /J    Directory Junction (you should prefer /D)

With no options, it creates a NTFS file symlink.
'
mklink () {

    if [ "$#" -ge "3" ]; then
        cmd /c mklink "$1" "$(cygpath --windows --absolute "$2")" "$(cygpath --windows --absolute "$3")"
    else
        cmd /c mklink "$(cygpath --windows --absolute "$1")" "$(cygpath --windows --absolute "$2")"
    fi

}
:'
mklink-创建Windows和Cygwin可用的NTFS(Windows)链接
用法:mklink[/D |/H |/J]
选项:
/D目录符号链接
/H硬链接
/J目录连接(您应该更喜欢/D)
如果没有选项,它将创建NTFS文件符号链接。
'
mklink(){
如果[“$#”-ge“3”];则
指令/