You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中shutil.ignore_patterns使用有效glob模式却不生效

解决shutil.copytree无法排除.git目录的问题

正确代码

将ignore模式改为直接匹配.git目录即可:

import shutil
shutil.copytree(src, dst, ignore=shutil.ignore_patterns('.git'), dirs_exist_ok=True)

原模式失效的原因

shutil.ignore_patterns的匹配逻辑和你用glob测试的逻辑存在差异:

  • glob的**/.git/**是基于完整路径的全局匹配
  • 但shutil.copytree调用ignore函数时,是针对每个目录下的直接子条目进行匹配。比如遍历仓库根目录时,它只会检查当前目录下的.git这个条目,不会带路径前缀,因此**/.git/**这种带路径的模式无法匹配到目标条目。

如果需要排除多个类似的Git相关文件或目录,直接将它们添加到ignore_patterns参数中即可:

shutil.copytree(src, dst, ignore=shutil.ignore_patterns('.git', '.github', '.gitignore'), dirs_exist_ok=True)

内容的提问来源于stack exchange,提问作者nathlrowe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:27:02