Linux 与 Windows 下的大文件分割与合并

在传输大文件的时候,容易出现卡死、传输失败等情况。另外,一些网盘,通信工具等不支持单个文件超出多少大小。这个时候就要用上大文件分割。

文件分割

一种办法是使用压缩文件产生压缩分卷,压缩方式选择 “存储”。但这样需要压缩软件参与,会增加不必要的文件头。其实大文件是可以直接分割的。

首先需要分割后单个文件的大小,因为命令中文件大小按照字节表示。

1
2
3
5m=5*1024*1024=5242880
1g=1*1024*1024*1024=1073741824
2g=2147483648

然后认识下 split 命令,

1
2
3
4
5
6
7
8
9
10
11
12
split 命令

  功能说明:切割文件。
  语  法:split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
  补充说明:split可将文件切成较小的文件,预设每1000行会切成一个小文件。
  参  数:
  -<行数>或-l<行数>  指定每多少行就要切成一个小文件。
  -b<字节>  指定每多少字就要切成一个小文件。支持单位:m,k
  -C<字节>  与-b参数类似,但切割时尽量维持每行的完整性。
  --help  显示帮助。
  --version  显示版本信息。
  [输出文件名]  设置切割后文件的前置文件名,split会自动在前置文件名后再加上编号。

这是 Linux 的命令,Windows 的命令提示符(cmd)是不支持的,但 Windows 下的 git,cygwin 都是支持的。

以下是例子

1
2
3
split -b 5242880 a.zip #按照字节分隔,默认分割为xaa,xab...
split -b 100m b.zip b.zip. #按照字节分隔,分割为b.zip.aa,b.zip.ab...
split -l 1000000 c.zip c/c.zip. #按照行数分隔,保存到文件夹c下

文件合并

这个命令是通用的,cmd 环境也可以运行。

1
copy /b a.zip.*  a.zip #将a.zip.一系列文件拷贝到a.zip