普通解壓器先把文件全部解出來,壓縮包留在原地,等用戶確認沒問題再手動刪除。最壞的那一瞬間,磁盤上同時躺着壓縮包和解出的文件:180 GB 的包解出 200 GB,那一刻要 380 GB。HatchZip 把順序倒過來,寫出一批文件就把壓縮包裏對應的字節截掉,壓縮包一路變短,峯值佔用接近輸出本身。項目用 Rust 寫成,Apache-2.0 許可,桌面窗口與命令行是同一樣東西。
兩倍空間的峯值
作者在一張 220 MiB 的盤上做了對照,盤裏只剩五十來兆,同一份 200 MB 遊戲數據(21 個文件)分別由真實工具打包。unzip 解到第 6 個文件就報空間不足。GNU tar 的 200 MB 包在常規工具手裏要 400 MB,這裏 0.12 秒解完,逐字節一致。7-Zip 25.01 的十個 20 MB 實心塊同樣過線,0.64 秒,常規工具需要 380 MB。拆成五個 40 MB 分卷的 7z 也沒卡住,峯值佔用 210 MB。速度上同樣一份數據的 ZIP,解壓 0.25 到 0.35 秒,unzip 6.00 要 1.48 到 1.50 秒。
![]()
能不能裝下由 check 子命令回答,只讀索引和剩餘空間,不動任何文件。給出的三行是可用空間、保留壓縮包所需的量、原地解壓所需的量,最後一行是結果還剩多少。差得不多時,輸出會直接說明差在哪兒。
邊寫邊刪的機制
ZIP 的一個條目、7z 的一個實心塊、tar 的一條記錄都能單獨解碼,被稱作 unit。ZIP 與 7z 把索引放在文件末尾,而截斷只能從後往前,所以先把索引抄到壓縮包旁邊的 .hatchzip-tail 並記下 CRC-32,之後從最後一個 unit 往前解。
每一批走五步:解到 .hatchzip-part、把這一批落盤、寫進度文件記下已提交的長度、把壓縮包截到本批最低 unit 的起點。進度文件 .hatchzip 裏存着格式與各分卷的原始長度,還有尾部位置、輸出目錄與已提交長度,中斷之後接着做不必猜測格式。截斷用的是各系統都自帶的縮短文件,不必動文件開頭。分捲包按一個邏輯文件處理,整卷解完就刪,跨卷的條目等最後一段出來;RAR 的每一卷本身是完整的 RAR 文件,按文件釋放;.tar.gz 只能從前往後解碼,改成邊解邊在壓縮流上打洞,每 256 MiB 留一個可恢復點。
![]()
省不掉的情形
實心 7z 只有一個塊時,整塊解完才談得上釋放,而 7-Zip 的默認設置正是一整塊,這類包在動手前就被拒絕,並說明需要多少空閒空間。加 --keep-archive 想要保留壓縮包時按普通解壓走,需要的空間是全部輸出。輸出目錄與壓縮包不在同一塊盤,釋放壓縮包也幫不到輸出那一側。.tar.zst 與 .tar.xz 目前直接拒絕,加密條目暫不支持,實心 RAR 只能保留壓縮包再解。FAT32 與 exFAT 上的 .tar.gz 仍然可解可續,但要留出壓縮包加全部文件的空間。btrfs 或 APFS 上被快照蓋住的壓縮包空間,要等快照刪掉纔回來。
中斷與還原
兩條規則撐住斷電安全:進度文件不會聲明還沒落盤的文件,壓縮包也不會被截到進度文件之前。任何一步斷掉,要麼文件已經在盤上,要麼字節還在壓縮包裏,不會兩頭落空。繼續時先刪掉沒提交的半成品,重做那一批。
想徹底收手就用 restore,剩下的壓縮包正好是還沒解出的部分,補寫一段索引就能被常規工具打開,已經解出的文件留在輸出目錄。拿不準下載是否完整時加 --verify-first,先覈對每個文件的校驗和再動手。目錄裏已有同名文件時默認拒絕,--replace 會把舊文件先挪進 .hatchzip-replaced,全部解完再按選擇刪掉或放回,--skip-existing 則保留原有的那一份。--keep-free 默認留 2 GB 不碰,避免把盤寫滿到零。
![]()
安裝這一步,Windows 的 setup 是逐用戶安裝,不需要管理員權限,會加右鍵菜單;便攜版解壓即用;macOS 有 dmg,Linux 有 deb 與 rpm,也有免安裝的 AppImage,Homebrew 與 Scoop 都能裝。命令行與桌面版共用同一個引擎,短名 hz。項目說明裏寫明代碼簽名還沒買,Windows 上要在提示裏點更多信息再點仍要運行,macOS 15 之後要在系統設置裏放行。
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com
