大文件切割与合并:split 与 cat
发布时间:2026-07-28 11:46       
更新时间:2026-07-28 16:22
一个几十 GB 的备份包要挪去另一台机器,目标端有单文件大小限制,或者传到九成断线只能重来——这类问题的标准解法是先切小、再传输、落地后合并。切小的收益有三个:单次失败只需重传一个分片;坏在哪一片由校验直接定位;分片还能并行传输赶时间。
按大小切割
`split -b 2G backup.tar.gz part-` 把文件按 2GB 一片切开,生成 part-aa、part-ab、part-ac 这样递增的名字,-b 后面可以跟 K、M、G 单位。想让后缀是数字,加 -d:`split -b 2G -d backup.tar.gz part-`,得到 part-00、part-01,排序更直观。切之前 `df -h` 确认磁盘剩余空间够放两份数据,切完 `ls part-* | wc -l` 数一下片数,记进清单。
按行切割
文本日志更适合按行切:`split -l 5000000 access.log line-`,每 500 万行一个文件,方便按片并行分析,也避免单文件过大撑爆下游工具。
传输与合并
切好的文件逐个 scp 到目标机器,合并只要一条命令:
```bash
cat part-* > backup.tar.gz
```
星号展开按字母序进行,与切割时的递增后缀天然一致,所以合并前不要重命名或打乱文件。没合并完就急着解压,是新手最常见的翻车点。合并前确认目录里只有这一批分片——混进旧文件时星号照样展开,垃圾数据就混进结果里了,目标目录先清空是好习惯。
校验合并结果
合并有没有出错,靠校验和说话。切割前先算一次:`md5sum backup.tar.gz > backup.md5`,把校验文件和分片一起传过去,目标机器合并完执行 `md5sum -c backup.md5`,输出 OK 才算传输成功;再用 `du -sh` 对比源文件与合并结果的大小,双保险。多生成一份清单(`ls part-* > list.txt`)跟着走,接收方一眼就知道该有几个分片、总体多大。
两个延伸的坑:一是分片没传完就合并,cat 会把不完整的尾部也拼进去,校验必然失败,耐心等全部到位;二是默认两位后缀可容纳六百多片,更大的文件用 `split -a 3` 加长后缀,别等数到 zy 才发现快没名字可分。
整套流程只依赖 coreutils,任何 Linux 都能跑。切完点数量、合并完必校验,这两步不做,前面切得再规范也白搭。