至少在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
吗?我可以帮忙吗?
答案 0 :(得分:2)
您可以分两步完成:首先,使用shutil.copytree()
以适当的权限复制完整的目录和文件结构。然后,您可以更改来源的权限,以确保您有权删除内容,并使用shutil.rmtree()
删除旧来源。