Pythonshutil.copytree
不是很灵活;在复制时添加对忽略权限的支持的最简单方法是什么copytree
(无需重新编写其实现)?
否则,copytree
会像这样失败:
(…)”[Errno 45] Operation not supported: ‘/path/foo/bar’”
不是线程安全的(或一般建议),但对于一次性脚本来说可以:
进口舒蒂尔 _orig_copystat = shutil.copystat shutil.copystat = lambda x, y: x shutil.copytree(src, dst) shutil.copystat = _orig_copystat
你有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,或者找到另一个库。
在 Python 3.2 及更高版本中,现在有一种内置方法可以做到这一点。shutil.copytree
接受自定义文件复制函数作为参数。您可以使用它来将其从默认文件复制功能 ( shutil.copy2
) 更改为不复制权限的功能,例如shutil.copy
:
shutil.copytree(src, dst, copy_function=shutil.copy)