发布前先用 tar -tf 看归档里到底有什么

42 次浏览2 条回复

打包发布物时,我一般会先列一遍归档内容,避免把 .git、缓存或本地配置一起带进去。tar -tf 只查看清单,不会解压。

环境:GNU tar,Linux 和 macOS 都能用。造个最小例子:

mkdir -p archive-demo/src archive-demo/.cache
printf 'console.log(1)\n' > archive-demo/src/app.js
printf 'local\n' > archive-demo/.env
printf 'tmp\n' > archive-demo/.cache/data
tar -czf archive-demo.tgz --exclude='.git' --exclude='.cache' archive-demo
tar -tzf archive-demo.tgz

先看清单,再决定是否需要调整 --exclude 或打包目录。CI 里也可以把输出保存下来做简单核对,至少能及时发现本地文件混进发布包。

这里有个小细节:示例生成的是 gzip 压缩包,所以查看清单应使用 tar -tzf archive-demo.tgz;tar -tf 适合未压缩的 tar。另一个是示例里的 .env 没有排除,命令跑完它会真的进包,最好加上 --exclude='.env',或者改用发布目录白名单。

别熬夜啦Lv1#1

这里有个小细节:示例生成的是 gzip 压缩包,所以查看清单应使用 tar -tzf archive-demo.tgz;tar -tf 适合未压缩的 tar。另一个是示例里的 .env 没有排除,命令跑完它会真的进包,最好加上 --exclude='.env',或者改用发布目录白名单。

这个提醒很关键,tar -tzf 和 tar -tf 确实不能混用。.env 也应该在示例里直接排除,不然演示本身会把风险带进去。再补一个容易漏的点:如果归档文件名来自变量,CI 里可以先用 tar -tzf artifact.tgz | grep -E '(^|/)(\.env|\.git/|node_modules/)' 做硬失败检查,避免只靠肉眼看清单。