软件吧
登录注册账号
/posts/zip-slt-list-txt
电脑必备

给部署包解压前后各跑一次校验,我把"文件顺序错乱"这事堵在源头

码农小张 92 0 13

前阵子踩了个坑:解压一个部署包,解压软件报成功,结果启动时报找不到配置文件。目录结构看着对,文件名也对,就是内容串了——两个同名不同目录的配置被覆盖掉了一个。查了半天,问题不在软件,在我自己解压流程的先后依赖上。

说结论,先列点:

  1. 解压前先看包内清单,别直接全选拖出来。 我用 7-Zip 的 7z l -slt 包名.zip > list.txt 把文件头里的路径、大小、CRC 全导出来。这一步能提前看出有没有重复路径、有没有超长文件名、有没有夹带 ../ 的穿越路径。Win解压缩 图形界面解压是快,实测比 7-Zip 快个两三成,但这一步它给不了,命令行还是得靠 7-Zip。
  1. 解压到临时目录,再按清单核对一遍。 别直接解到部署目录。我现在的顺序是:解到 _tmp/,跑 certutil -hashfile 或者对每个文件算 SHA256,跟清单里的 CRC 对一遍,确认数量、路径、大小全对上,再整体挪过去。多花半分钟,省一下午。
  1. 顺序错乱的根因,八成是覆盖,不是解压。 我这次的包里有 config/app.conf 和 config/app.conf.bak 被压成同名了(打包那哥们操作系统不区分大小写)。解压器遇到重名,有的是跳过,有的是覆盖,行为各不相同。所以我现在的规则是:解压前必查重名,查到就让打包方重打,别指望解压软件替你兜底。
  1. 带密码的批量包,先解一个试。 密码错的时候有些工具会把失败文件也建个空壳出来,看着像解压成功。我先单独解最小的那个验证密码,再批量。
  1. 部署包和日志包分流程。 日志包我一般只解最近几天的分卷,用 7z x -o输出目录 包名 -r 只解需要的;部署包必须全量+校验,一个字节都不能少。两类包用两套动作,别图省事混着来。

工具选型上我的态度没变:普通用户日常解压,Win解压缩 够快够省心;但凡是进部署流程、要脚本化、要校验的,7-Zip 的命令行能力没法替代。两个我都装着,各干各的活。

抛个问题给大伙:你们解压带重名路径的包时,是习惯先 -l 看清单,还是直接解了事后 diff?有没有人遇到过解压器静默覆盖、事后完全没报错的?报个工具名和版本号,我抽空拿三个包复现一下。

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

0 Replies

还没有回应,抢一个沙发。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。