split -b 是最稳、最轻量的按字节切分方案,不改数据、不压缩、不校验,快且跨平台;需注意单位用大写(如450M)、显式指定前缀、用-d避免字母排序问题,并验证哈希确保无损。

直接用 split -b 按字节切,别绕弯
split是最稳、最轻量、无需额外依赖的方案。它不改原始数据,不压缩,不校验,就是纯粹按字节切——所以快、可靠、跨平台合并无压力。 常见错误是写错单位或忽略后缀命名逻辑,导致后续合并出错或文件乱序。
- 单位必须带字母:
-b 450M合法,-b 450m在部分老系统(如 CentOS 6)可能被当成 450 字节,务必用大写M/G - 不指定输出前缀时,默认生成
xaa、xab这类名字,容易和别的split结果冲突,建议显式指定,比如split -b 2G bigfile.zip chunk_ - 如果目标是 FAT32 U 盘(单文件 ≤4GB),切到
3900M更安全,留点余量防文件系统元数据占用
split -d 加数字后缀,避免字母排序陷阱
默认的 用数字后缀能彻底规避: 最后提醒一句:切完别急着删原文件。先在目标机上跑一遍 xaa、xab 看似简单,但用 ls chunk_* 列表时,chunk_zz 会排在 chunk_aa 前面;更糟的是,chunk_ab 实际比 chunk_aa 大,但字符串比较下 ab 不成立——这会让脚本合并时顺序错乱。
split -b 2G -d bigfile.iso iso_part. → 生成 iso_part.00、iso_part.01 -a 3 控制位数:split -b 2G -d -a 3 bigfile.iso part_ → part_000、part001,方便 cat part* > merged 且保证字典序 = 实际顺序 合并时用
cat,但顺序必须严格cat 合并本身极快,但顺序错一个字节就全毁。
cat chunk_* > out —— shell 展开顺序取决于 locale 和文件系统,不可靠 printf 排序: cat $(printf '%s\n' chunk_* | sort) > merged.file
或更稳妥(尤其含空格路径时):
printf '%s\0' chunk_* | sort -z | xargs -0 cat > merged.file
-d 数字后缀,cat chunk.[0-9][0-9] > merged 也行,但注意通配符范围要匹配实际后缀长度 别用
dd 手动切,除非你真需要跳过开头 N 字节dd 看似灵活,实则极易出错:
- bs=1G count=1 切第一块没问题,但第二块得写 skip=1,第三块 skip=2……漏一个就断层
- dd 不自动计算总块数,需先用 stat -c "%s" bigfile 算大小再除,易算错
- 错误示例:dd if=bigfile of=p1 bs=2G count=1 + dd if=bigfile of=p2 bs=2G skip=1 count=1 ——若原文件大小不是 2G 整数倍,p2 开头会缺数据
split 内部已处理好边界对齐和最后一块截断,你只需要关心切多大、叫什么名。 cat chunk_* | sha256sum 和原文件比对哈希,确认无损再清理。这是最容易被跳过的验证步骤。











