python shutil.copytree - 忽略权限

时间:2009-08-20 00:51:18

标签: python file shutil

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

否则,copytree会失败:

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

3 个答案:

答案 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)