Python使用tarfile打包时排除.git文件夹的实现方案
Python tar打包排除.git目录的替代实现方案
Python 3.12及以上版本中,tarfile模块的tar.add()方法确实正式弃用了exclude参数,官方推荐使用filter参数完成过滤逻辑,以下是具体实现方式:
1. 代码场景(使用Python tarfile模块)
自定义过滤函数传入filter参数即可:
import tarfile def git_filter(tarinfo): # 匹配所有.git目录及内部文件,匹配成功返回None则跳过打包 if ".git" in tarinfo.name.split("/"): return None # 其他文件/目录正常保留 return tarinfo with tarfile.open("repo_archive.tar.gz", "w:gz") as tar: # 打包当前目录下所有内容,传入自定义过滤规则 tar.add(".", arcname=".", filter=git_filter)
如果需要同时排除其他目录,只需要在过滤函数中新增判断条件即可,灵活性比旧的exclude参数更高。
2. 命令行场景(直接调用系统tar工具)
如果不需要通过Python代码实现,直接使用终端命令即可快速完成打包:
- 执行命令:
tar -zcvf repo_archive.tar.gz --exclude='.git' ./
如果需要排除多个目录,追加多个--exclude参数即可,示例:tar -zcvf repo_archive.tar.gz --exclude='.git' --exclude='node_modules' --exclude='__pycache__' ./
内容的提问来源于stack exchange,提问作者PaxPrz
相关产品推荐
相关产品推荐

