大纲
1、文件的切分和合并工具
2、文件的切分:split
3、语法格式
4、split实战演练
5、合并:cat
6、文件完整性校验
1、文件的切分和合并工具
有时候我们可能遇见这种情况,有时文件比较大,想上传到服务器上,但由于服务器管理员为了安全考虑,把上传空间作了限制,比如只能上传20M的文件,如果我们文件的体积在100M的,有时就是压缩也不能满足服务器上传的限制。这时我们就要考虑切分文件了,把100M的文件,切分成若干份,然后传到服务器上。切分后的每个文件都是原文件的组成部份。如果要获得整个完整的文件,我们就需要文件的结合工具。
2、文件的切分:split
split - split a file into pieces。split 是把一个文件拆分为长度或体积相等的若干文件的工具。
3、语法格式
[root@localhost ~]# split --help Usage: split [OPTION] [INPUT [PREFIX]] Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default size is 1000 lines, and default PREFIX is `x'. With no INPUT, or when INPUT is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -a, --suffix-length=N use suffixes of length N (default 2) -b, --bytes=SIZE put SIZE bytes per output file -C, --line-bytes=SIZE put at most SIZE bytes of lines per output file -d, --numeric-suffixes use numeric suffixes instead of alphabetic -l, --lines=NUMBER put NUMBER lines per output file --verbose print a diagnostic to standard error just before each output file is opened SIZE may have a multiplier suffix: b for 512, k for 1K, m for 1 Meg.
-l,指定每多少行切割一次,用于文本文件分割
-b 指定切割文件大小,单位m或k
-C 与-b类似,但尽量维持每行完整性
文件切割模式分为两种:
对文本文件进行切分
对二进制文件进行切分
4、split实战演练
示例1
将a.tar.gz按每个5M大小进行切割:(二进制模式)
[root@localhost tmp]# ls -lh total 17M -rw-r--r-- 1 root root 17M Jun 20 22:15 a.tar.gz [root@localhost tmp]# split -b5m a.tar.gz mysplit- [root@localhost tmp]# ls -lh total 33M -rw-r--r-- 1 root root 17M Jun 20 22:15 a.tar.gz -rw-r--r-- 1 root root 5.0M Jun 20 22:17 mysplit-aa -rw-r--r-- 1 root root 5.0M Jun 20 22:17 mysplit-ab -rw-r--r-- 1 root root 5.0M Jun 20 22:17 mysplit-ac -rw-r--r-- 1 root root 1.2M Jun 20 22:17 mysplit-ad
我们指定outfile的文件名为:"mysplit-",如果不指定那么默认以xaa, xbb.. 命名。
示例2
按行数对文本文件myfile.txt进行切分:(文本模式)
[root@localhost tmp]# cat myfile.txt 1 2 3 4 5 6
[root@localhost tmp]# split -l2 myfile.txt myfile- [root@localhost tmp]# ls -l total 16584 -rw-r--r-- 1 root root 16919415 Jun 20 22:15 a.tar.gz -rw-r--r-- 1 root root 4 Jun 20 22:25 myfile-aa -rw-r--r-- 1 root root 4 Jun 20 22:25 myfile-ab -rw-r--r-- 1 root root 4 Jun 20 22:25 myfile-ac -rw-r--r-- 1 root root 12 Jun 20 22:25 myfile.txt [root@localhost tmp]# head myfile-a* ==> myfile-aa <== 1 2 ==> myfile-ab <== 3 4 ==> myfile-ac <== 5 6
我们可以看到,每个文件都只有2行哦,注意-l仅能对文本文件(ASCII)进行操作。
我们已经把大文件切割为多个小文件,那么我们如何把它们合并还原呢?请看:
5、合并:cat
cat是常用的文件查看命令,利用cat命令可以把多个文本文件合并为单个文件。
# 将几个文件合并为一个文件 # cat file1 file2 file3 > file
那么,示例2中将分割文件合并,可以使用:
[root@localhost tmp]# cat myfile-* > file [root@localhost tmp]# cat file 1 2 3 4 5 6
OK, 还原完成。那么对于文本文件可以使用cat命令,那么对于切割的二进制文件呢?
答案是肯定的,同样可以使用cat来完成。
所以,针对示例1,可以使用:
[root@localhost tmp]# cat mysplit-* > my.tar.gz
6、文件完整性校验
我们把一个大的文件分拆为多个小文件时,肯定会考虑到,我们重新把一个一个小的分拆文件连接起来,会不会能和原文件保持一致 。这样的疑问其实也是有道理的,因为这关系到一个文件的完整性。那么验证文件是否完整呢,这时就涉及到文件的校验工具。一般我们是通过MD5工具来校验对比。在Linux也有这样的工具,叫做md5sum。它的作用原理主要是根据原始文件的内容进行计算,然后给出一个校验码,当原始文件在网络传输出错,或被修改,那么再次对其进行md5校验,将产生的校验码和原始产生的校验码比对,如果相同则是一致的,反之说明不一致。
[root@localhost tmp]# md5sum a.tar.gz e760656f7cf2f05158f73da75e8b720b a.tar.gz [root@localhost tmp]# md5sum my.tar.gz e760656f7cf2f05158f73da75e8b720b my.tar.gz
OK, 事实也证明合并后的文件是完整的。