适用场景
某些传输渠道允许发送多个文件,却限制每个文件的大小。已经完成的镜像、压缩包或资料文件可以先切成较小分卷,到接收端再合并。本文使用 GNU 工具,适用于常见 Linux 发行版。操作目标是得到与原文件逐字节一致的重建文件,而不是修改文件格式。
请使用已经停止写入的普通文件练习。正在增长的日志、运行中的数据库文件、被虚拟机持续修改的磁盘文件,都不应直接套用本教程;应先通过对应应用的正规导出或备份功能获得稳定副本。
原理
split 按指定字节数顺序切分输入,原文件保持不变。每个分卷通常不是完整的压缩包,也不一定能单独打开。cat 按参数顺序连接分卷,恢复原始字节流。只要分卷内容完整、数量齐全且顺序正确,就能够重建原文件。
数字编号需要补零。例如四位编号会生成从 0000 开始的序列,使文件名排序与切分顺序一致。固定四位编号最多容纳一万个分卷,超出时应增大编号宽度并从空目录重新切分。不能在报错后把已有部分分卷当成完整结果。
准备工作
准备 Bash、GNU Coreutils 和 GNU Diffutils。本文先生成一个很小的演示文件,用每卷十字节验证流程,之后再说明实际大文件参数。所有输出放入新目录,避免混入上一次操作留下的分卷。
同一磁盘上保留原件、全部分卷和重建文件时,资料部分通常需要接近原文件三倍的总空间,还应预留文件系统余量。切分本身不会压缩数据。传输涉及敏感资料时,应另外使用经过授权的加密渠道,分卷并不提供保密能力。
分步骤操作
第一步:建立独立演示目录
mkdir split-demo-20261030
cd split-demo-20261030
mkdir parts
printf '%s\n' 'alpha beta gamma delta epsilon zeta' > original.bin
目录名是本次练习的输出名称。如果创建时提示已存在,请换一个新名称,并同步修改进入目录的那一行,不要直接进入内容未知的旧目录。original.bin 是程序生成的演示输入,parts 用来单独存放分卷。
第二步:切分并查看结果
split -b 10 -d -a 4 -- original.bin parts/chunk-
printf '%s\n' parts/chunk-[0-9][0-9][0-9][0-9]
wc -c -- original.bin parts/chunk-[0-9][0-9][0-9][0-9]
参数 -b 10 表示每卷最多十字节,-d 使用数字编号,-a 4 指定四位宽度。最后一个参数是输出路径前缀,不是输入目录。除最后一卷外,各卷应为十字节;最后一卷保存剩余内容。查看大小时要注意,wc 最后的总计包含清单中所有文件,不能直接把它误认为分卷总和。
第三步:合并到另一个文件
(
set -o noclobber
export LC_ALL=C
cat -- parts/chunk-[0-9][0-9][0-9][0-9] > rebuilt.bin
)
括号让防覆盖和排序环境只影响本次合并。匹配表达式仅选择四位数字编号的分卷,文件名由本教程生成,因此可以预期其排列方式。防覆盖选项使 rebuilt.bin 已存在时停止写入,避免误覆盖上一次结果。若命令报错,先处理问题,不要继续宣布合并完成。
验证方法
cmp -- original.bin rebuilt.bin
result=$?
printf '比较退出状态:%s\n' "$result"
cmp 没有输出且退出状态为 0,表示两个文件逐字节相同。状态为 1 表示内容不同,状态为 2 表示读取等操作发生问题。必须立即保存退出状态,否则后续命令会改变它。文件大小相同只是辅助线索,不能证明内部内容相同。
练习完成后,可以为真实文件建立另一个空工作目录,将输入路径设为实际文件的绝对路径,并把切分命令改为如下形式:
input_file='/实际文件的绝对路径'
split -b 100000000 -d -a 4 -- "$input_file" parts/chunk-
input_file 的引号内需要填写真实文件路径;parts 必须是本次新建的空分卷目录。这里每卷上限为一亿字节,即十进制一百兆字节。若传输渠道还有封装开销或不同计量口径,应选更小的分卷容量。实际重建后,仍应与保留的原件进行比较;原件不在接收端时,应安排把重建结果带回原件所在环境完成核对。
常见错误
从旧目录重新切分时,旧的高编号分卷可能残留并参与合并。只传递前几卷会得到截短文件,遗漏中间分卷则会破坏后续结构。合并时添加文本行号、删除空行或使用文本编辑器保存,都会改变原始字节。不要为二进制分卷添加任何文本处理参数。
安全与回退
原件始终是回退依据。出现空间不足、传输中断或比较失败时,保留原件,检查并重新生成或重新传送分卷。修正问题后使用新的输出目录再次操作,避免结果混杂。只有重建文件核验通过并确认可以正常使用后,才考虑清理练习目录或多余副本;清理前逐项确认路径,不要在资料目录中盲目执行递归删除。
参考资料与转载说明
本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。
评论一下?