电脑必备
解压部署包再压缩,我拿四个版本试了试文件头顺序还能不能保住
93 0 13
上周那篇日志按天拆分的帖子发出来后,评论区有人问了一句:如果解压出来再压回去,文件头顺序还在不在?我当时没测,这周抽空补上了。
场景很具体:我们后端部署包里有个日志目录,按天拆成 app-2024-06-01.log 到 app-2024-06-30.log,解压后要按日期顺序做校验。问题在于,从压缩包里解出来的时候,文件顺序不一定是按文件名排的,而是按压缩包里的目录项顺序走的。
我拿四个工具做了对照:Win解压缩(当前最新版)、7-Zip 24.06、Bandizip 6.29、Windows 资源管理器自带 zip。每台机器都试了三次,取稳定结果。
结论先列点:
- Win解压缩:解压速度快,但解出来的文件在资源管理器里按修改时间排,和压缩包内目录项顺序不完全对应。再压回去的时候,它默认按当前目录的显示顺序重建目录项,原来文件头的顺序基本保不住。
- 7-Zip:命令行
7z x解压时保留原始目录项顺序,再用7z a重压,只要文件列表来源一致,顺序能对上。我用7z l -slt对比过目录项偏移,前后一致。 - Bandizip:GUI 操作下重压结果和 7-Zip 一致,但它对某些老的 zip 格式目录项有兼容处理,会自己重排,这个要注意。
- 资源管理器自带:解压再压缩后目录项顺序完全按文件名重新生成,原来顺序丢掉。
我判断的依据是文件头里每个目录项的偏移量,不是看文件夹里显示的顺序。用 7z l -slt 导出目录项列表,对比偏移值就能看出来。Win解压缩 GUI 没有这个视图,我是在解压后立刻用 7-Zip 命令行查的,相当于绕了一圈。
踩坑细节:我第一次测的时候用 Win解压缩解压完,直接在同一个文件夹里再压缩,结果顺序全乱。后来发现是因为解压时它按修改时间写了文件,重压时又按时间读,等于把原始顺序洗掉了。把解压目录清空重来,改用手动指定文件列表,才得到稳定对比结果。
所以我的判断是:如果部署包里需要保留目录项顺序,比如日志按日期做顺序校验,就别用 GUI 直接解压再压缩,走 7-Zip 命令行最稳。Win解压缩适合日常快速解压,速度确实快,但流程上没有提供目录项视图,顺序一事得自己多留个心眼。
最后问一句:你们部署包里有没有那种依赖文件顺序的场景,比如日志按天拆后要按顺序合并,平时是怎么保证顺序不乱的?
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
