将大文件切割成多个小文件

发布于 2024-01-26

这种场景还是挺常见的,比如:

  1. 文本文件太大了,编辑器打开耗时太长,需要切割成小文件再打开
  2. 某些工具传输单个文件有大小限制,如微信、公司邮箱等

这种时候就可以借助 split 来切割文件了,传输/处理完后再使用 cat 命令来拼接成完整的文件。

重点要提的一点是 split 不仅可以用来切割文本文件,也可以切割任何二进制文件。 切割之后再使用 cat 命令拼接得到的依旧是原来的,完整的,有效的二进制文件。

split 命令的用法其实很简单,参数和支持的选项都不多。

基本用法

split [选项] [要切割的文件 [切割后的小文件名称前缀]]

split 命令是支持管道操作符的, 如果要切割的文件没传值或者传值为 - ,则表示从标准输入读取数据。 例如:

echo "hello world" | split -b 5 - test_

切割文本文件(按行数切割)

split -l 100 input_file.txt output_prefix

这将把 input_file.txt 分割成每个包含 100 行的小文件,以 output_prefix 为小文件名前缀。

切割二进制文件(按大小切割)

split -b 20M large_file.exe output_prefix

这将把 large_file.exe 分割成每个文件大小为 20M 的部分,以 output_prefix 为小文件名前缀。

合并为完整的文件

cat output_prefix* > new_large_file.exe

这样就可以把切割后的多个小文件拼接成一个大文件, 可以和原始的大文件对比一下 md5, 它们是一样的,说明文件并没有被损坏。

也就是说,如果原文件是图片,合并后还能正常打开查看; 原文件是 windows 安装包,合并后还能双击安装[手动狗头]。

其他选项的用法示例

echo "hello world" | split -b5 -a4 -d --additional-suffix=.txt - test_
  • -a4 : 指定文件后缀长度为 4 位
  • -d : 指定使用数字作为文件序号,而不是字母
  • --additional-suffix=.txt : 指定为所有文件再添加额外的后缀为 .txt

如上命令将得到三个文件,分别是

test_0000.txt
test_0001.txt
test_0002.txt