5

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

否则,copytree会像这样失败:

(…)”[Errno 45] Operation not supported: ‘/path/foo/bar’”
4

3 回答 3

5

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

进口舒蒂尔

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

shutil.copytree(src, dst)

shutil.copystat = _orig_copystat
于 2013-06-10T10:50:47.837 回答
3

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

XXX Consider this example code rather than the ultimate tool.

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

于 2009-08-20T00:58:06.207 回答
1

在 Python 3.2 及更高版本中,现在有一种内置方法可以做到这一点。shutil.copytree接受自定义文件复制函数作为参数。您可以使用它来将其从默认文件复制功能 ( shutil.copy2) 更改为不复制权限的功能,例如shutil.copy

shutil.copytree(src, dst, copy_function=shutil.copy)
于 2020-11-02T23:24:54.447 回答