HatchZip:磁盘快满了也能解压大文件,开源免费的原地解压工具

磁盘只剩一点空间,偏偏要解一个巨大的压缩包,是很多人都遇到过的死局:传统解压工具要求压缩包和解压出来的文件同时存在,180 GB 的包解出 200 GB 的文件,就得准备 380 GB 的空闲空间,空间不够就只能先删东西腾地方。刚在 GitHub 走红的开源工具 HatchZip 换了个思路:解压的同时把压缩包本身一点点「吃掉」,解完之后磁盘上只剩下解出来的文件。

HatchZip 应用窗口:左侧文件列表,右侧显示解压所需磁盘空间与标准解压的对比

从尾部倒着解,解完一段截掉一段

HatchZip 的核心原理并不复杂。ZIP 和 7z 的索引都存在文件末尾,它先把索引存到一个小的进度文件里,然后从压缩包的最后一部分开始倒着解,每解完一批,就把压缩包截短到这一批开始的位置。腾出来的空间马上可以给下一批文件用,所以磁盘上永远不会同时装着整个压缩包和全部解出文件。

HatchZip 从压缩包尾部倒着解压、解完一段截掉一段的原理示意

拿作者的例子算一笔账:180 GB 的游戏下载解压后是 200 GB,用 WinRAR、7-Zip 或 unzip 需要 380 GB 空闲空间,HatchZip 只需要 200 GB 出头。解压前它会先算一遍空间够不够,不够就直接拒绝、一个字节都不动,而不是解到一半才报错。

实测数据:在只剩 50 MB 的盘上解 200 MB 的包

作者用同一份 200 MB 游戏数据(21 个文件)、在只有约 50 MB 空闲的 220 MiB 磁盘上做了对比,条件写得相当实在:

压缩包 unzip / 7-Zip HatchZip
ZIP,180 MB 解到第 6 个文件时空间耗尽 全部解完,逐字节一致
7z(7-Zip 25.01,10 个固实块) 需要 380 MB 0.64 秒解完,逐字节一致
7z 分卷(5 卷,每卷 40 MB) 需要 380 MB 解完,峰值占用 210 MB,分卷逐个删除
tar,200 MB 需要 400 MB 0.12 秒解完,逐字节一致

速度上也有优势:同一份 ZIP 数据 HatchZip 用 0.25 到 0.35 秒,unzip 6.00 要 1.48 到 1.50 秒(且 HatchZip 还多做了一次 unzip 省掉的 fsync 落盘)。不过作者也注明,并行解压是速度来源,包里只有一个大文件时速度就是单核速度。

支持的格式不少,覆盖日常所需

  • ZIP / ZIP64,含自解压 .exe,Stored、Deflate、Deflate64、bzip2、LZMA、PPMd、XZ、Zstandard 编码都测过;
  • 7z,固实与非固实,LZMA2、LZMA、bzip2、Deflate、PPMd 等;
  • tar、.tar.gz / .tgz,含多成员 gzip 与分卷 .tar.gz.001;
  • 分卷压缩包(.001、.002……),ZIP 或 7z 分卷,解空一卷删一卷;
  • RAR / RAR 5 / RAR 4,发行版内置 UnRAR 解码(cargo 安装的版本不带 RAR 支持);
  • 带密码的 ZIP 和 7z,先拿一个文件验证密码,密码不保存,断点续解时要重新输入。

此前介绍过的 PeaZip 也是开源免费的解压工具,不过它走的是常规解压路线,空间不够的问题依然存在;需要在线处理超大文件的话,也可以看看 GigaZip 这个在线超大文件压缩解压工具。HatchZip 的差异点就在于「原地解压」这个机制本身。

敢删自己输入的工具,安全机制是重点

一个会在解压过程中删除压缩包的工具,最怕的就是中途出事丢文件。HatchZip 对此下了不少功夫:

  • 先算账再动手:解压前完整推演一遍,找出整个过程中最吃空间的时刻,而不是只算总量;默认始终保留 2 GB 空闲(可用 –keep-free 调整),磁盘不会被填到零;
  • 落盘后再截断:每个文件写入、刷到物理磁盘、重命名到位之后,才截掉压缩包里对应的部分,中途崩溃也只会是「文件已落地」或「字节还在包里」二选一;
  • 随时可停可续:按 Ctrl+C 会先把手头文件写完、保存进度再退出,之后用同一条命令继续;断电、崩溃、磁盘被别的东西占满也一样能续;
  • 不想继续可以还原:hatchzip restore 能把剩下的压缩包恢复成普通压缩包,里面恰好是还没解出的内容,7-Zip、WinRAR 照常能打开;
  • 损坏与恶意包先拦下:每个文件解压时校验 CRC-32,损坏的文件不写出、留在包里;会逃出输出目录的路径、重叠条目、重复条目、setuid/setgid 位都会被拒绝。

当然它也有保护不了的情况:如果下载本身就是坏的,坏点之前的文件能解出来,但压缩包已经被部分消耗了,无法复原。对无法重新下载的文件,记得用 –verify-first 先完整校验一遍再解。

安装与使用:图形界面和命令行都有

HatchZip 提供桌面应用和命令行两种形态,Windows 10 / 11、macOS(Apple Silicon 与 Intel 都有)、Linux(.deb、.rpm、AppImage)全覆盖:

  • 桌面版:从官网下载安装包,右键压缩包选 HatchZip → Extract here 即可;空间不够会提前告诉你差多少;
  • 命令行:hatchzip check game.zip 先看空间规划,hatchzip extract game.zip 开始解压,hatchzip list / test 可以查看内容或校验;
  • 包管理器:macOS / Linux 可用 brew install xevrion/tap/hatchzip,有 Rust 环境也可以 cargo install hatchzip(不带 RAR 支持)。

需要注意两点:一是目前安装包和 macOS 应用都还没签名,Windows 会弹「Windows 已保护你的电脑」,选「更多信息」→「仍要运行」;macOS 则需要在「系统设置 → 隐私与安全性」里放行一次。二是只从项目仓库的 Releases 页和 hatchzip.dev 下载,作者明确指出 hatchzip.com 之类同名站点与本项目无关。

局限也要说在前面

  • 用 7-Zip 默认设置压出的单个固实块 7z,必须等整个块全部解出才能释放空间,需要的空闲空间就是整个块的大小,check 会提前算给你看;
  • .tar.zst、.tar.xz 目前会被直接拒绝,属于计划中功能;
  • 固实 RAR 只能在保留压缩包模式(–keep-archive)下解;
  • 在 btrfs 或 APFS 上,如果快照里包含这个压缩包,快照删掉之前空间不会真正释放。

总的来说,HatchZip 解决的是一个很具体但很真实的痛点:磁盘快满时解大包。项目 2026 年 10 月 21 日才创建,几天内已经拿到 1700 多星,MIT / Apache-2.0 双协议开源,感兴趣可以直接去仓库看看。

转自 GitHub 作者 xevrion 的文章《HatchZip》,原文链接:https://github.com/xevrion/hatchzip;官网:https://hatchzip.dev

© 版权声明
THE END
喜欢就支持一下吧
点赞23 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容