用 tar -czf 配合 --exclude 可排除指定目录,路径需准确(不加末尾/),支持通配符如 '*/cache' 和 exclude-from 文件管理规则,打包后用 tar -tzf 验证排除效果。

直接用 tar -czf 加 --exclude 就能搞定,关键是路径写法要对,否则排除会失效。
排除日志和临时目录的常用写法
假设你要打包 /app/project,但想跳过里面的 logs 和 tmp 目录,命令这样写:
tar -czf project.tar.gz --exclude=logs --exclude=tmp /app/project- 如果路径不统一,比如在项目根目录下执行,就用相对路径;如果从别处运行,建议用绝对路径:
--exclude=/app/project/logs - 注意:排除路径末尾不要加
/,写成logs/会导致排除失败
多级目录中批量排除同名文件夹
比如项目里各层都有 cache 或 node_modules,不想一个个写,可以用通配符:
tar -czf app.tar.gz --exclude='*/cache' --exclude='*/node_modules' /app/project-
*/cache表示任意层级下的cache目录,不限于第一级 - 通配符需用单引号包裹,防止 shell 提前展开
用 exclude-from 文件管理复杂排除规则
当要排除的目录很多、或规则经常变动时,把路径写进一个文本文件更清晰:
- 新建
exclude-list.txt,每行一个路径:
logs
tmp
dist
.git - 执行:
tar -czf project.tar.gz --exclude-from=exclude-list.txt /app/project - 文件里的路径是相对于打包源目录的,比如
/app/project是源,则写logs即可,不用写全路径
验证是否真的排除成功
打包完别急着用,先快速检查一下:
-
tar -tzf project.tar.gz | head -20查看前20个文件,确认 logs/tmp 没出现 -
tar -tzf project.tar.gz | grep -E "(logs|tmp)/"搜索关键词,输出为空才说明排除干净 - 如果发现漏了,大概率是
--exclude的路径没匹配上,重新核对层级和拼写

















