首页 > 代码库 > 文件的切分split和合并cat

文件的切分split和合并cat

大纲

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, 事实也证明合并后的文件是完整的。


本文出自 “Share your knowledge” 博客,请务必保留此出处http://skypegnu1.blog.51cto.com/8991766/1429126