直接 unzip FFHQ.z01 报错因 unzip 不支持 ZIP 分卷格式,首卷缺中央目录、末卷才含目录但无全部数据,且 Linux 的 unzip 未实现分卷解析;必须按正确顺序 cat 合并再验证。

为什么直接 unzip FFHQ.z01 会报 “not a valid zip file”
因为 unzip 工具根本不识别 .z01、.z02 这类后缀——它只认标准 ZIP 格式,而分卷 ZIP 的每个分卷都不是独立有效的 ZIP 文件。首卷(如 .z01)缺中央目录,末卷(.zip)才有,但又不包含全部数据。Linux 下的 unzip(Info-ZIP 实现)至今未支持 ZIP 分卷解析逻辑,强行解压单个分卷必然失败。
合并分卷必须按正确顺序用 cat,不能靠通配符乱序拼接
分卷 ZIP 是严格按二进制流切分的,顺序错一位,整个 ZIP 结构就损坏。常见错误是直接 cat FFHQ.* > full.zip,但 shell 展开 FFHQ.* 时可能按字典序排成 FFHQ.zip、FFHQ.z01、FFHQ.z02……这会导致末卷(含中央目录)被放在最前面,解压时找不到数据块。
- 先用
ls -1 FFHQ.* | sort -V确认顺序是否为FFHQ.z01→FFHQ.z02→ … →FFHQ.zip - 手动列出所有分卷,确保
.z01在前、.zip在最后:cat FFHQ.z01 FFHQ.z02 FFHQ.z03 FFHQ.z04 FFHQ.zip > full.zip - 如果分卷命名是
archive.zip.001、archive.zip.002形式,同样要按数字顺序拼接:cat archive.zip.001 archive.zip.002 archive.zip.003 > archive.zip
解压前务必验证合并结果是否为有效 ZIP
合并完别急着 unzip,先用 file 和 unzip -t 快速验伤:
-
file full.zip应输出类似full.zip: Zip archive data, at least v2.0 to extract -
unzip -t full.zip会做完整性校验,若报error: invalid compressed data to inflate或missing 123456789 bytes,说明合并顺序或文件缺失 - 常见漏掉的坑:误删了
.z01只剩.zip;或下载不全导致某个.z02文件大小明显偏小(比如其他都是 20GB,它只有 2MB)
rar / 7z 分卷不能用 cat 合并,得换工具
上面说的 cat 合并仅适用于 ZIP 分卷(.z01 系列或 .zip.001 系列)。如果是 RAR 分卷(.rar、.r00、.r01)或 7z 分卷(.7z.001、.7z.002),它们的结构和校验机制完全不同,cat 拼出来的是废文件。
- RAR 分卷:用
unrar x archive.rar(自动识别并加载所有分卷) - 7z 分卷:用
7z x archive.7z.001(注意指定第一个分卷即可) - 不确定格式时,先用
file archive*查看实际类型,再选对应命令
合并 ZIP 分卷这事看着简单,真正卡住人的永远是顺序和完整性——多一个空格、少一个分卷、错一位数字,解压出来的就是一堆乱码。动手前花 10 秒 ls 和 file 看一眼,比重下几小时的包强得多。


















