2016-12-05 54 views
1

至少在窗口上,shutil.move包含只讀文件到另一個驅動器的文件夾將失敗。它失敗,因爲movecopy後跟rmtree實施。最後,rmtree試圖刪除不可寫入的文件。如何通過驅動器上的只讀文件`shutil.move`

目前我解決它首先設置stat.S_IWUSER所有(嵌套)文件,但我現在還是要恢復原來的stat算賬:

def make_tree_writable(source_dir): 
    for root, dirs, files in os.walk(source_dir): 
     for name in files: 
      make_writable(path.join(root, name))  

def make_writable(path_): 
    os.chmod(path_, stat.S_IWUSR) 

def movetree_workaround(source_dir, target_dir): 
    make_tree_writable(source_dir) 
    shutil.move(source_dir, target_dir) 

所以我想:這是方法?在我可以使用的製作中是否有shutil2?我可以在那裏得到任何幫助嗎?

+2

爲什麼不先執行'shutil.copytree()',然後更改源代碼的權限,最後在源代碼中更改'shutil.rmtree'的權限? – VBB

+3

爲什麼不把它倒入一個答案,以便我可以upvote呢? – xtofl

+0

相關(不重複):[shutil.rmtree刪除只讀文件](http://stackoverflow.com/q/21261132/364696) – ShadowRanger

回答

2

您可以通過兩個步驟來完成此操作:首先,使用shutil.copytree()以適當的權限複製完整的目錄和文件結構。然後,您可以更改源的權限以確保您有權刪除東西,並使用shutil.rmtree()刪除舊源。

相關問題