Python的shutil.copytree
不是很灵活;在copytree
中复制时添加对忽略权限的支持的最简单方法是什么(无需重写其实现)?
否则,copytree
会失败:
(…)”[Errno 45] Operation not supported: ‘/path/foo/bar’”
答案 0 :(得分: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 :(得分:2)
不是线程安全的(或者通常是可取的)但是对于一次性脚本是可以的:
import shutil _orig_copystat = shutil.copystat shutil.copystat = lambda x, y: x shutil.copytree(src, dst) shutil.copystat = _orig_copystat
答案 2 :(得分:2)
在Python 3.2和更高版本中,现在存在一种内置方法。 shutil.copytree
接受自定义文件复制功能作为参数。您可以使用它来将其从默认文件复制功能(shutil.copy2
)更改为不复制shutil.copy
之类的权限:
shutil.copytree(src, dst, copy_function=shutil.copy)