为Cygwin启用本机NTFS符号链接
最近的NTFS和Windows实现符号链接:为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
- 可以使用
或linkd
工具从NTFS 3.0(Windows 2000)起用作目录符号链接junction
- 也可以用作符号链接(用于文件和目录),因为Windows Vista使用了
工具mklink
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
- 默认符号链接是包含魔法cookie的普通文件 后跟链接指向的路径。[……]
- 快捷方式样式符号链接是Windows
[…]创建的 如果环境变量CYGWIN[…]设置为包含 字符串.lnk
或winsymlinks
。[……]winsymlinks:lnk
- 本机Windows符号链接仅在Windows Vista/2008及更高版本上创建,
并且仅在支持重分析点的文件系统上。
由于它们奇怪的限制和行为,它们只是被创造出来的
如果用户明确要求创建它们。
这是通过设置环境变量CYGWIN来实现的
要包含字符串
或winsymlinks:native
。 [……]winsymlinks:nativestrict
- 在NFS文件系统上,Cygwin始终创建真正的NFS符号链接
CYGWIN
和选项winsymlinks
:
CYGWIN
环境变量用于配置许多全局设置[…]。
它包含下面列出的选项,用空白字符分隔。[……]
- [……]
- [……]
- [……]
- [……]
- 如果设置为仅winsymlinks:{lnk,native,nativestrict}
或winsymlinks
,Cygwin将创建符号链接 作为带有特殊标题和R/O属性集的Windows快捷方式 如果设置为winsymlinks:lnk
或winsymlinks:native
, Cygwin在文件系统上将符号链接创建为本机Windows符号链接 以及支持它们的操作系统版本。如果已知操作系统不支持 本机符号链接(Windows XP、Windows Server 2003),警告消息 每个会话生成一次winsymlinks:nativestrict
和winsymlinks:native
是否为:如果文件系统支持本机 符号链接和Cygwin由于某种原因无法创建本机符号链接, 它将退回到使用创建Cygwin默认符号链接winsymlinks:nativestrict
,而使用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”];则
指令/