2011-01-31 99 views
21

我想将文件src复制到目标dst,但如果src碰巧是符号链接,请保留链接而不是复制文件的内容。复制完成后,os.readlink应返回相同的srcdst复制Python中的符号链接

模块shutil有多种功能,如copyfilecopycopy2,但所有这些都将复制内容的文件的,并不会保留链接。 shutil.move具有正确的行为,除了删除原始文件的事实。

Python中是否有内置的方法来执行文件副本,同时保留符号链接?

回答

38

只是做

def copy(src, dst): 
    if os.path.islink(src): 
     linkto = os.readlink(src) 
     os.symlink(linkto, dst) 
    else: 
     shutil.copy(src,dst) 

shutil.copytree有类似的功能,但作为senderle指出,这是挑剔,只复制目录,而不是单个文件。

+1

我尝试使用`copytree`来做到这一点,我得到了一个OSError抱怨`src`不是一个目录;我认为检查`os.path.islink`确实是唯一的方法。 – senderle 2011-01-31 08:34:35