2011-01-31 53 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