检查cygwin中符号链接类型的区别

时间:2014-06-14 17:42:22

标签: cygwin symlink

我同时使用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知道本机符号链接: explorer screen shot 或者从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:nativeCYGWIN=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知道或关注。

1 个答案:

答案 0 :(得分:3)

我最终编写了这个脚本。 cygwin中的测试是调用dos命令和grep来获取所需的信息。

if fsutil reparsepoint query "$1" | grep -iq "Tag value: Symbolic Link" ; then
    echo "Windows Native Symlink"
fi