zip分卷压缩大目录必须加-r参数,否则仅生成空目录;-s需居中且单位小写,如zip -r -s 500m a.zip /path生成a.z01、a.z02…a.zip,缺一不可。

用 zip -s 分卷压缩大目录,但必须带 -r
zip 是 Linux 上少数原生支持分卷压缩的工具,对超大文件夹(比如几十 GB 的日志或媒体库)最实用。关键点是:分卷必须配合递归参数 -r,否则只打包空目录结构。
- 不加
-r会导致压缩包里只有文件夹名,没任何内容 -
-s参数必须写在zip命令中间位置,不能放在最后(顺序敏感) - 分卷后生成的是
archive.z01、archive.z02…archive.zip一组文件,最后那个.zip是“主索引”,缺一不可
示例:把 /data/large_project 按每卷 500MB 分卷zip -r -s 500m project.zip /data/large_project
注意:500m 中的 m 必须小写,M 或数字后无单位会报错 zip error: Invalid command arguments
tar 不直接支持分卷,得靠 split 拆流
tar 本身没有内置分卷选项,但可以组合 split 实现类似效果,适合需要 .tar.gz 兼容性的场景。
- 先用
tar -czf - /path输出到 stdout(不写磁盘),再用split切块 - 每块命名建议用
-d(数字后缀)和-b(字节大小),避免解压时顺序错乱 - 合并还原时必须按字典序 cat,不能靠 ls 默认排序(尤其当分卷数 ≥ 100)
示例:生成每块 400MB 的分卷tar -czf - /data/large_project | split -b 400M - project.tar.gz.
生成 project.tar.gz.aa、project.tar.gz.ab…
解压时:cat project.tar.gz.* | tar -xzf -
警告:如果原始目录含大量小文件,tar -czf - 可能因内存缓冲导致首块偏大,实际每块大小会有 ±5% 浮动
分卷后怎么验证完整性?
分卷不是简单切文件,而是逻辑连续的数据流,任意一块损坏都会导致整个解压失败。
- 对
zip分卷:用unzip -t archive.zip,它会自动识别并校验全部分卷(包括.z01等) - 对
split出的.tar.gz分卷:先cat合并再gzip -t,或直接tar -tzf /dev/stdin - 不要依赖
ls -l看大小来判断——分卷末尾块常比设定值略小,这是正常行为
最容易被忽略的一点:传输分卷文件时,务必确认所有分卷都到达目标机器,且文件名未被截断(比如 Windows SMB 共享可能隐式重命名 .z01 为 .z01_)











