代码之家  ›  专栏  ›  技术社区  ›  David Sykes

在Mac OS X中复制符号链接

  •  28
  • David Sykes  · 技术社区  · 17 年前

    在Mac上复制符号链接的最简单方法是什么?

    我正在复制安装包的框架,需要维护链接

    4 回复  |  直到 17 年前
        1
  •  49
  •   brian d foy    17 年前

    正如David提到的,OSX缺少handy——GNUCP拥有的一个选项。

    但是,如果使用-R进行递归复制,那么默认情况下它将复制符号链接,因此

    cp -R source destination
    

        2
  •  9
  •   n1000    9 年前

    解决 @布莱恩德福伊 过去是正确的。较新版本的macOS确实支持

    cp -a
    
        3
  •  3
  •   Florian Bösch    17 年前

    os.readlink os.symlink os.lstat stat.S_ISLNK

    import os, stat
    if stat.S_ISLNK(os.lstat('foo').st_mode):
        src = os.readlink('source')
        os.symlink(src, 'destination')
    

    你可以用这个 -R option of cp . 这是因为cp在默认情况下不遵循符号链接,而是在不指定-R(表示递归)的情况下复制非文件。

    cp -R source destination
    

    在python中,这将与 subprocess.call

    from subprocess import call
    call(['cp', '-R', 'source', 'destination'])
    

    macosx alias 不是符号链接,因此特定于符号链接的处理将失败。

        4
  •  0
  •   Arne Burmeister    17 年前

    当您标记python时,我想您指的是类似copytree(src,dst[,symlinks])的东西。真正的符号链接(由ln-s创建)将像在任何unix系统上一样被复制。但是,如果使用finder创建别名,则不会得到符号链接,而是别名。MacOS提供两种类型的链接:unix类型的符号链接和别名(请参阅 http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/Articles/Aliases.html )。许多工具都不会将这些别名视为链接-据我所知,copytree和copytree都不会。