我同时使用winsymlinks:native和cygwin符号链接,具体取决于windows是否需要和CAN遵循链接。我希望有一个cygwin方式来查看它是什么类型的符号链接,因为它只是看到一个符号链接但DOS看到了差异。我需要知道差异所以我可以处理rsyncing / etc /并保留(或重新创建)符号链接的类型。
我有创建dos本地的权限,并具有设置任何一个的功能:
$ touch test
# cygwin style symlink
$ CYGWIN= ln -s test t1
# WINDOWS style
$ CYGWIN=winsymlinks:native ln -s test t2
# for good measure make one the DOS way
$ cmd /c mklink t3 test
symbolic link created for t3 <<===>> test
cygwin将它们全部视为符号链接:
$ ls -l
total 1
lrwxrwxrwx 1 user Users 4 Jun 14 11:06 t1 -> test
lrwxrwxrwx 1 user Users 4 Jun 14 11:06 t2 -> test
lrwxrwxrwx 1 user Users 4 Jun 14 11:06 t3 -> test
-rw-rw-rw-+ 1 user Users 0 Jun 14 11:05 test
Windows知道本机符号链接:
或者从DOS上看:
$ cmd /c dir /a
Volume in drive C is Windows
Directory of C:\Cygwin-32\tmp
06/14/2014 11:06 AM 22 t1
06/14/2014 11:06 AM <SYMLINK> t2 [test]
06/14/2014 11:06 AM <SYMLINK> t3 [test]
06/14/2014 11:05 AM 0 test
4 File(s) 22 bytes
那么在CYGWIN中查看时如何判断它是什么类型的符号链接?当我同步这些符号链接时,cygwin将在目的地中将它们全部设置为CYGWIN env var中设置的类型。我想将符号链接类型保留在rsync目标中,或者至少浏览源文件夹,找出类型并在目标位置更改它们。 stat
也只将它们报告为符号链接,但没有看到区别。
添加此部分,因为我讨厌&#34;为什么你需要(或想要)这样做?&#34;答案:
为什么要混合符号链接?我尝试将我的整体CYGWIN env var设置为CYGWIN=winsymlinks:native
和CYGWIN=winsymlinks:nativestrict
,但在某些软件包安装期间(主要使用apt-cyg
)我在提取的几个软件包的TAR中出错了所以我离开了out,只调用CYGWIN = winsymlinks:native,因为我需要它们(如果windows需要关注链接)。我认为这些软件包是从最初的CYGWIN setup.exe安装为cygwin符号链接的,因此全局设置该值会在以后产生问题。我还有CYGWIN = winsymlinks:nativestrict设置创建一个实际的&#34; / usr / bin /&#34;文件夹(可以在资源管理器中看到),但是cygwin将/ bin挂载为/ usr / bin,这样就可以获得在cygwin中找不到的包。
而且还因为有一些符号链接我不希望Windows知道或关注。
答案 0 :(得分:3)
我最终编写了这个脚本。 cygwin中的测试是调用dos命令和grep来获取所需的信息。
if fsutil reparsepoint query "$1" | grep -iq "Tag value: Symbolic Link" ; then
echo "Windows Native Symlink"
fi