python shutil.copytree - 忽略权限
Python中的shutil.copytree
这个功能不是特别灵活;有没有简单的方法可以让它在复制的时候忽略权限设置,而不需要重新写这个功能的代码呢?
否则,copytree
在执行时会出现这样的错误:
(…)”[Errno 45] Operation not supported: ‘/path/foo/bar’”
3 个回答
1
在Python 3.2及更高版本中,现在有一种内置的方法可以做到这一点。shutil.copytree
可以接受一个自定义的文件复制函数作为参数。你可以用这个功能把默认的文件复制函数(shutil.copy2
)换成一个不复制权限的函数,比如shutil.copy
:
shutil.copytree(src, dst, copy_function=shutil.copy)
5
这个代码不是线程安全的(也就是说在多线程环境下可能会出问题),一般情况下不建议使用,但如果只是写个临时的小脚本,那用它也没关系:
import 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 把这个示例代码当作参考,而不是最终的工具。
所以,最简单的方法其实就是修改或添加几行代码到copytree,或者找一个其他的库,老实说。