在Mac OS X中复制符号链接

时间:2008-10-21 09:14:53

标签: macos

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

首选python或perl解决方案,但任何解决方案都可以提供帮助。

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

4 个答案:

答案 0 :(得分:38)

正如David所说,OS X缺少gnu cp所具有的方便选项。

但是,如果使用-R进行递归复制,则默认情况下会复制符号链接,所以

cp -R source destination

应该工作。

答案 1 :(得分:3)

在python中,您可以使用os.readlinkos.symlink来执行此操作。您应该检查您的操作是否实际上是与os.lstatstat.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不是符号链接,因此符号链接特定处理将失败。

答案 2 :(得分:3)

@brian d foy 的解决方案曾经是正确的。较新版本的macOS支持

cp -a

答案 3 :(得分:0)

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