簡體   English   中英

Python shutil.move:奇怪的軟鏈接

[英]Python shutil.move: odd softlinking

我編寫的腳本旨在將單個日間目錄從舊位置移動到具有以下結構的新位置:

/old/YYYY/MM/DD
/new/YYYY/MM/DD

對於另一個任務(與數據的移動無關),我在新位置中創建了這樣的軟鏈接(這是我犯的第一個錯誤):

/new/2011/09 -> /old/2011/09

我的腳本必須使用此函數調用:

for d in os.listdir("/old/2011/09"):
    shutil.move(os.path.join("/old/2011/09/", d), os.path.join("/new/2011/09", d))

運行我的腳本后,2011/09的內容均為空。 我在使用未存檔的數據時發生這種情況...大問題。 我的問題是,為什么shutil.move()沒有給我一個錯誤,提示我正在移動的日期目錄已經存在? 由於存在軟鏈接,因此09內的每一天都應該是同一目錄。

/new/2011/09/01 == /old/2011/09/01

在調用shutil.copy2之前,shutil.move調用不檢查src和dst嗎? 從文檔中:“目標目錄必須不存在。” 還是僅當它使用重命名時? 並且,如果這有所作為,那么舊位置和新位置都將成為glusterfs。

shutil.move文檔

shutil.copy文檔

感謝您的澄清。

編輯/更新 :我向python列表提交了一個問題,詢問為什么存在此行為,並詢問是否應更改( 列表歸檔 )。 他們建議我提交一個錯誤報告。 在進行測試以提交錯誤時,我發現此問題已在Python 2.7中修復。 您可以在move函數聲明中看到源代碼之間的差異: Python 2.6Python 2.7

仍然可以進行移動/重命名,但不會神奇地刪除整個目錄。

它歸結為shutil.move中的這兩行:

        copytree(src, real_dst, symlinks=True)
        rmtree(src)

其中src='old'real_dst='new/old' copytree命令復制old的子目錄new/old 很好,盡管可能不是您想要的。

rmtree刪除old目錄。 這是一個問題,因為new現在是懸而未決的符號鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM