python Shutil.copytree - 忽略权限

问题描述 投票:0回答:4

Python 的

shutil.copytree
不太灵活;在
copytree
中复制时添加对忽略权限的支持的最简单方法是什么(无需重新编写其实现)?

否则,

copytree
会像这样失败:

(…)”[Errno 45] Operation not supported: ‘/path/foo/bar’”
python file shutil
4个回答
5
投票

不是线程安全的(或者一般来说是可取的),但对于一次性脚本来说还可以:

导入Shutil

_orig_copystat = Shutil.copystat
Shutil.copystat = lambda x, y: x

Shutil.copytree(src, dst)

Shutil.copystat = _orig_copystat

3
投票

您的标准 Python 发行版中有

shutil.py
(例如,在 Ubuntu 上,我的位于
/usr/lib/python2.6
下;Windows 可能是
C:\Python26\lib
?)。 copytree 函数只有 38 行长(如果不计算注释则为 34 行),并且文档字符串的末尾明确指出:

XXX Consider this example code rather than the ultimate tool.

所以说实话,最简单的方法就是更改/添加几行到copytree,或者找到另一个库。


1
投票

在 Python 3.2 及更高版本中,现在有一种内置方法可以执行此操作。

shutil.copytree
接受自定义文件复制函数作为参数。您可以使用它将其从默认文件复制功能 (
shutil.copy2
) 更改为不复制权限的功能,例如
shutil.copy
:

shutil.copytree(src, dst, copy_function=shutil.copy)

0
投票

使用子进程来避免权限问题。 这对我有用:

导入子流程 命令 = f"cp -r {src_dir} {dst_dir}" subprocess.run(命令,shell=True)

© www.soinside.com 2019 - 2024. All rights reserved.