tar 排除规则怎么用
打包备份不需要把缓存、临时文件、可再生成内容一起塞进归档:体积大、恢复慢,还会把频繁变化的文件带进来影响校验。tar 支持命令行 --exclude 与规则文件 --exclude-from 两种写法,规则按归档内的相对路径匹配,写错前缀是常见失败原因。
基本信息
| 适用平台 | GNU tar(Linux 各发行版)、bsdtar(macOS / FreeBSD 语法略有差异) |
|---|---|
| 两种写法 | --exclude='模式' 逐条给出;--exclude-from=文件 从规则文件读取 |
| 匹配规则 | 默认按归档内的相对路径匹配,可用通配符;顺序上后写的排除规则仍会生效 |
| 确认手段 | -tzf 列出归档清单,grep 检查关键文件是否收录 |
典型使用场景
- Web 站点备份:排除日志、缩略图缓存与会话目录
- 代码仓库快照:排除 node_modules、虚拟环境与构建产物
- 系统目录备份:排除 /proc、/sys、/dev 等虚拟文件系统
- 数据库文件目录:排除临时表空间与测试库数据
- 规则固化管理:把排除清单写进版本化文件,避免每次手敲
排除写法与校验
排除写法与校验
# 命令行逐条排除(注意相对路径口径)
tar -czf /backup/app-$(date +%F).tar.gz \
--exclude='*.tmp' --exclude='cache' --exclude='node_modules' \
-C /srv app
# 规则文件方式:把模式写进文件便于评审与版本管理
tar -czf /backup/app.tar.gz --exclude-from=/etc/tar-exclude.txt -C /srv app
# 规则文件示例内容:# *.log cache/ */tmp/
# 校验:确认关键配置与证书确实被收进归档
tar -tzf /backup/app-$(date +%F).tar.gz | grep -E 'nginx.conf|\.crt$'排除写法对照
| 写法 | 匹配对象 | 注意点 |
|---|---|---|
| --exclude='cache' | 任意层级下名为 cache 的条目 | 范围偏宽,可能连不需要排除的同名目录一起排除 |
| --exclude='./cache' | 打包根目录下的指定子路径 | 与 -C 指定的工作目录配合才准确 |
| --exclude='*/logs/*' | 任意子目录下的 logs 内容 | 不会排除 logs 目录本身,目录会留在归档里 |
| --exclude-from | 规则文件中的多条模式 | 规则文件里不要写注释行以外的多余空格 |
排除之后仍要核验归档清单是否包含关键配置与密钥文件:用 tar -tzf 归档 | grep -E 'conf|key' 检查,排除规则写宽了会把它们一起漏掉。
排除规则只影响新归档的收录范围,不会修改已有归档;调整规则后应重新生成一份备份并核对清单,而不是想当然认为历史归档也变了。