【问题标题】:how to `shutil.move` with readonly files across drives如何使用跨驱动器的只读文件“shutil.move”
【发布时间】:2026-01-01 01:20:07
【问题描述】:

至少在 Windows 上,shutil.move 包含只读文件到另一个驱动器的文件夹将失败。它失败是因为move 是用copy 后跟rmtree 实现的。最后是rmtree试图删除不可写文件。

目前我通过首先为所有(嵌套)文件设置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?我能帮上忙吗?

【问题讨论】:

  • 为什么不先shutil.copytree(),然后更改源的权限,最后在源上shutil.rmtree
  • 为什么不将其倒入答案中以便我可以投票?
  • 相关(不重复):shutil.rmtree to remove readonly files
  • :) 好的,下面回答!

标签: python windows file-access shutil


【解决方案1】:

您可以分两步完成:首先,使用shutil.copytree() 复制具有适当权限的完整目录和文件结构。然后您可以更改源的权限以确保您有删除内容的权限,并使用shutil.rmtree() 删除旧的源。

【讨论】: