文件分割与合并
造冰箱的大熊猫,本文适用于Linux和Windows@cnblogs 2018/12/19
用FAT32文件格式的优盘复制文件时,需要注意文件大小不能超过4GB(我曾经有过一次这样的尴尬经历:在计算机A上将一个压缩文件复制到优盘上。在计算机B上打开该文件时,提示压缩包数据错误。以为是下载文件时出现了问题,于是回到计算机A重新下载,重新复制到优盘,但在计算机B上再次打开文件时依然提示压缩包数据错误。一番折腾之后才突然意识到是文件大小与优盘文件格式不匹配。复制文件到优盘上时,操作系统并没有提示文件过大)。为了解决这个问题,有时候会使用压缩工具将文件分割成若干个小文件。这里,介绍另一种相对简单的处理方式:
1、分割文件
1.1、在Linux下
在终端中执行以下命令将文件MyFile分割为若干个文件。分割出的文件名称依次为xaa、xab、xac等。每个分割文件的大小为1000行。split命令从MyFile的文件开始位置以字节为单位读取文件,直到读取到字符0x0a(\n,newline,ASCII LF)。然后将读取到的字节作为1行写入分割文件。0x0a之后的字符作为下一行的第一个字节。
split MyFile
1.2、在Windows下
不知道!有知道的什么样的Windows操作或命令等同于split命令,请赐教。
2、合并split分割出的文件
2.1、在Linux下
如果是在Linux系统下,在终端中执行以下命令将分割文件xaa、xab、xac合并为文件MergedFile。
cat xaa xab xac > MergedFile
如果分割文件名按照字母顺序排列的(split命令默认按照字母顺序生成分割文件名),可使用如下命令合并文件。
cat xa* > MergedFile
2.2、在Windows下
在命令行中执行以下命令[2]将分割文件xaa、xab、xac合并为文件MergedFile。
copy /b xaa+xab+xac MergedFile
3、文件校验
3.1、在Linux下
为了确保合并后的文件是正确的,可在命令行中执行以下命令计算MyFile(被分割文件)的md5[3]值。
md5sum MyFile
执行结果一般如下所示,其中“7ee1... ...5bdd”为MyFile的MD5值。
7ee145c1b86b6af987c3803361cf5bdd MyFile
对合并文件MergedFile进行同样的操作,如果MergedFIle的md5值与MyFile的md5值相同,则合并文件正确。
md5sum MergedFile
为了省去人工判别MD5值的麻烦,可以按照以下步骤执行。首先执行以下命令计算MyFile的md5值,并将结果保存到checkresult.txt文件中。
md5sum MyFile >> checkresult.md5
将checkresult.md5复制到存放MergedFile的路径下,将MergedFile改名为MyFile,并在该路径下执行以下命令
md5sum checkresult.md5
运行结果如下所示,如果校验成功显示OK,失败则显示FAILED。
MyFile.dat: FAILED/OK
3.2、在Windows下
找个Windows下支持md5校验的工具吧,具体不知道。
2019/2/23补充:有关文件完整性校验可参考这里。
4、split命令的参数使用
将文件分割为指定大小(1GB)的文件。
split -b 1GB MyFile
设置分割文件名后缀为“.asf”。
split --additional-suffix .asf MyFile
设置分割文件名前缀为“mysplit”。
split MyFile mysplit
设置分割文件以数字标识(分割文件名依次为x00,x01,x02)。
split -d MyFile
split命令的其它参数详见split命令的网页[1]。
[1] gnu.org: Split File into Pieces