首页/数据/备份与容灾速查/tar 排除与规则文件

tar 排除与规则文件

打包时排除缓存、临时文件与可再生成内容:既减少体积也避免把易变数据带入归档;规则可写入文件由 --exclude-from 读取。

备份与容灾速查数据更新于 2026-10-13

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' 检查,排除规则写宽了会把它们一起漏掉。
排除规则只影响新归档的收录范围,不会修改已有归档;调整规则后应重新生成一份备份并核对清单,而不是想当然认为历史归档也变了。

易错点

  • --exclude 模式按归档内相对路径匹配:写成绝对路径前缀通常匹配不到,排除等于没写
  • 排除规则写得太宽:关键配置、证书或数据目录被一起排除,恢复时才发现缺文件
  • 规则文件里带注释或多余空格:被当作模式参与匹配,引发难以排查的漏排或误排
  • 从不核对归档清单:排除生效与否、关键文件是否收录全靠猜,直到恢复当天才发现

数据来源与参考

  • GNU tar 手册(--exclude、--exclude-from)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌