软件吧
登录注册账号
/posts/app-2024-06-01-log-app-2024-06-30-win
电脑必备

解压部署包再压缩,我拿四个版本试了试文件头顺序还能不能保住

码农小张 93 0 13

上周那篇日志按天拆分的帖子发出来后,评论区有人问了一句:如果解压出来再压回去,文件头顺序还在不在?我当时没测,这周抽空补上了。

场景很具体:我们后端部署包里有个日志目录,按天拆成 app-2024-06-01.log 到 app-2024-06-30.log,解压后要按日期顺序做校验。问题在于,从压缩包里解出来的时候,文件顺序不一定是按文件名排的,而是按压缩包里的目录项顺序走的。

我拿四个工具做了对照:Win解压缩(当前最新版)、7-Zip 24.06、Bandizip 6.29、Windows 资源管理器自带 zip。每台机器都试了三次,取稳定结果。

结论先列点:

  1. Win解压缩:解压速度快,但解出来的文件在资源管理器里按修改时间排,和压缩包内目录项顺序不完全对应。再压回去的时候,它默认按当前目录的显示顺序重建目录项,原来文件头的顺序基本保不住。
  2. 7-Zip:命令行 7z x 解压时保留原始目录项顺序,再用 7z a 重压,只要文件列表来源一致,顺序能对上。我用 7z l -slt 对比过目录项偏移,前后一致。
  3. Bandizip:GUI 操作下重压结果和 7-Zip 一致,但它对某些老的 zip 格式目录项有兼容处理,会自己重排,这个要注意。
  4. 资源管理器自带:解压再压缩后目录项顺序完全按文件名重新生成,原来顺序丢掉。

我判断的依据是文件头里每个目录项的偏移量,不是看文件夹里显示的顺序。用 7z l -slt 导出目录项列表,对比偏移值就能看出来。Win解压缩 GUI 没有这个视图,我是在解压后立刻用 7-Zip 命令行查的,相当于绕了一圈。

踩坑细节:我第一次测的时候用 Win解压缩解压完,直接在同一个文件夹里再压缩,结果顺序全乱。后来发现是因为解压时它按修改时间写了文件,重压时又按时间读,等于把原始顺序洗掉了。把解压目录清空重来,改用手动指定文件列表,才得到稳定对比结果。

所以我的判断是:如果部署包里需要保留目录项顺序,比如日志按日期做顺序校验,就别用 GUI 直接解压再压缩,走 7-Zip 命令行最稳。Win解压缩适合日常快速解压,速度确实快,但流程上没有提供目录项视图,顺序一事得自己多留个心眼。

最后问一句:你们部署包里有没有那种依赖文件顺序的场景,比如日志按天拆后要按顺序合并,平时是怎么保证顺序不乱的?

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

社区回应

0 Replies

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

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