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
相关产品推荐
相关产品推荐

