【问题标题】:python shutil.copytree - ignore permissionspython shutil.copytree - 忽略权限
【发布时间】:2009-08-20 00:51:17
【问题描述】:

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

否则,copytree 会像这样失败:

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

【问题讨论】:

    标签: python file shutil


    【解决方案1】:

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

    进口舒蒂尔 _orig_copystat = shutil.copystat shutil.copystat = lambda x, y: x shutil.copytree(src, dst) shutil.copystat = _orig_copystat

    【讨论】:

      【解决方案2】:

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

      XXX Consider this example code rather than the ultimate tool.

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

      【讨论】:

      • 这就是我在发布这个问题之前所做的。
      【解决方案3】:

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

      shutil.copytree(src, dst, copy_function=shutil.copy)
      

      【讨论】:

      • 这仅适用于文件,因为目录权限不使用 copy_function 复制。它们用 shutil.copystat() 显式镜像。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 2016-04-05
      • 2015-02-06
      • 1970-01-01
      • 2016-11-13
      • 2017-07-09
      • 2020-02-01
      相关资源
      最近更新 更多