电脑必备
压测了四款解压工具的命令行批量解压,Win解压缩快但脚本里真心不好用
91 2 16
上周要处理一批线上日志包,一共 1200 多个 zip,每个 1~5MB,得统一解压到按日期分的目录里。顺手把几款常用工具的命令行模式都拉出来跑了一遍,数据如下,给有批量需求的兄弟参考。
测试环境
- Win10 22H2,i5-10400,16G 内存,SATA SSD
- 样本:1200 个日志 zip,总大小约 3.2GB
- 计时方式:PowerShell 里
Measure-Command包一层,跑三遍取中位数
结果(解压 1200 个包总耗时)
- 7-Zip 22.01
7z x -o...:约 42 秒 - WinRAR 6.11
unrar x:约 46 秒 - Win解压缩 命令行模式:约 38 秒
- 系统自带 tar(Win10 1803+ 自带 bsdtar):约 55 秒
单看速度,Win解压缩确实最快,比 7-Zip 快 10% 左右,这点我不黑它。普通用户双击解压、右键菜单,体验也顺手。
但一到脚本里,问题就来了:
- Win解压缩的命令行参数文档基本等于没有,官网翻半天只有图形界面的说明,
--help输出也简陋,很多参数得靠猜。 - 不支持通配符批量匹配,1200 个包我得先在 PowerShell 里
ForEach-Object循环调用,进程启动开销全吃进去了。7-Zip 一个7z x *.zip就搞定。 - 退出码不统一,解压失败(比如包损坏)有时候返回 0,脚本没法判断,得额外去检查输出目录文件数,很别扭。
- 密码参数和编码参数藏得深,带中文文件名的包解出来偶尔乱码,7-Zip 加
-mcp=936就稳。
我的结论
- 日常手动解压、追求速度:Win解压缩没问题,快就是快。
- 要写进批处理、CI、定时任务、日志归档流程:还是 7-Zip,参数全、退出码规范、通配符和列表文件都支持,省心。
最后抛个问题:你们批量解压日志包时,是直接循环调命令行,还是有更省进程开销的写法?我目前是 PowerShell 里 Start-Process -Wait 一个个来,感觉还能再压一压时间。
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
