《Linux就该这么学》是一本基于最新Linux系统编写的入门必读书籍,内容面向零基础读者,由浅入深渐进式教学,销量保持国内第一,年销售量预期超过10万本。点此免费在线阅读。

15 分钟之后,我要去朋友家聚会。我打算从我的台式机上把一部 700MB 大小的美国大片拷贝出来,带到朋友家去看,可是我的两个优盘都只有 512MB,这让我如何是好?



别急,用 10 分钟赶快来认识一下我们的 split 拆分小能手,一切问题将迎刃而解。当遇到大文件而苦不堪言的时候,split 就会像天使一样解救我们于水火之中。

合久必分

闲言少叙,我们现在就来介绍拆分的方法。先使用 dd 命令来生成一个 700MB 文件来作为我们的拆分对象:

[root@roclinux ~]$ dd if=/dev/zero bs=1024 count=700000 of=king_of_ring.avi
700000+0 records in
700000+0 records out
716800000 bytes (717 MB) copied, 12.9189 s, 55.5 MB/s [root@roclinux ~]$ ls -l king_of_ring.avi
-rw-r--r-- 1 root root 716800000 Apr 12 13:01 king_of_ring.avi

美国大片的文件大小是 700MB,而我手边仅有的两个优盘,都是 512MB 大小的。我打算把文件以 400MB 作为一个拆分单位,来进行拆分。这里使用到了 split 的-b选项,来指定每个拆分文件的大小:

[root@roclinux ~]$ split -b 400M king_of_ring.avi

[root@roclinux ~]$ ls -l
total 1400008
-rw-r--r-- 1 root root 716800000 Apr 12 13:01 king_of_ring.avi
-rw-r--r-- 1 root root 419430400 Apr 12 13:04 xaa
-rw-r--r-- 1 root root 297369600 Apr 12 13:04 xab

看!分身完毕!咦,怎么多出了 xaa 和 xab 两个文件,这么奇怪的名字?



是的,你没看错,在没有明确指定拆分后文件的命名方式的情况下,split 会默认采用 x 字符作为文件前缀,采用类似 aa、ab、ac 的字符串依次作为文件后缀。于是,就出现了我们上面看到的 xaa、xab 了。



从文件大小来看,如我们所愿,电影文件的确被切割成了一个 400MB 的文件、一个 300MB 的文件,终于可以装到两个优盘里了。

知其然,知其所以然

知道了拆分命令后,我们来一起学习一下 split 的命令格式和常用选项。



split 的作用很好描述,就是将文件按照一定规则进行拆分。一般情况下,我们可以按照文件大小来进行拆分,如果是文本文件的话,还可以按照行数来进行拆分,默认是 1000 行作为一个拆分单位。



默认情况下,分割后的文件的名称会以 x 作为前缀,以 aa、ab、ac 这样的双字母格式作为后缀,形成 xaa、xab 这样的名称格式。



我们来一起看看 split 的命令格式:

split [-b ][-C ][-][-l ][要切割的文件][输出文件名前缀][-a ]

最常用的选项,都在这里了:

  • -b<字节>:指定按多少字节进行拆分,也可以指定 K、M、G、T 等单位。
  • -<行数>或-l<行数>:指定每多少行要拆分成一个文件。
  • 输出文件名前缀:设置拆分后的文件的名称前缀,split 会自动在前缀后加上编号,默认从 aa 开始。
  • -a<后缀长度>:默认的后缀长度是 2,也就是按 aa、ab、ac 这样的格式依次编号。

分久必合

完成了美国大片的拆分,我赶赴朋友家,打开他的电脑,优盘插上,使用 cat 命令将拆分文件 xaa 和 xab 合并成一个文件,可以看出合并后的文件和源文件的大小是一致的:

[root@roclinux ~]$ cat xaa xab > king_of_ring_merge.avi

[root@roclinux ~]$ ls -l
total 2100012
-rw-r--r-- 1 root root 716800000 Apr 12 13:01 king_of_ring.avi
-rw-r--r-- 1 root root 716800000 Apr 12 13:07 king_of_ring_merge.avi
-rw-r--r-- 1 root root 419430400 Apr 12 13:04 xaa
-rw-r--r-- 1 root root 297369600 Apr 12 13:04 xab

对了,如果是在 Windows 下的话,我们要先运行 cmd,然后用 copy 命令来进行文件的合并:

copy /b xaa + xab king_of_ring.avi

格式上和 Linux 有些区别,但原理是一样的。

设置拆分文件的名称前缀

上面例子中,我们没有指定拆分文件的名称前缀,结果拆分后的文件名都是 aa、ab 这样的名称,这样的名称既不达意也不美观。



下面的例子,我们尝试以 king_of_ring_part_ 作为拆分后文件的名称前缀:

#我们指定了king_of_ring_part_前缀
[root@roclinux ~]$ split -b 400m king_of_ring.avi king_of_ring_part_ #可以看到, 文件名的可读性提高了很多
[root@roclinux ~]$ ls -l king*
-rw-r--r-- 1 root root 716800000 Feb 25 18:29 king_of_ring.avi
-rw-r--r-- 1 root root 419430400 Feb 25 19:24 king_of_ring_part_aa
-rw-r--r-- 1 root root 297369600 Feb 25 19:24 king_of_ring_part_ab

文件名的可读性是不是提高了不少,从文件名称就可以看出来是美国大片的拆分文件啦。

设置数字后缀

如果大家看不惯以 aa、ab 这种字母作为文件后缀,我们还可以通过-d选项来指定数字形式的文件后缀:

#使用了-d选项
[root@roclinux ~]$ split -b 400m -d king_of_ring.avi king_of_ring_part_ #后缀从原来的aa、ab变成了00、01
[root@roclinux ~]$ ls -l king*
-rw-r--r-- 1 root root 716800000 Feb 25 18:29 king_of_ring.avi
-rw-r--r-- 1 root root 419430400 Feb 25 19:24 king_of_ring_part_00
-rw-r--r-- 1 root root 297369600 Feb 25 19:24 king_of_ring_part_01

对于中国人来说,数字形式的后缀,增加了文件名称的可读性。

按照行数进行拆分

前面我们讲的是按照文件大小(如 400MB)进行文件拆分的方法,但是并非所有情况都适合于用文件大小作为拆分单元。比如,我们希望把 /etc/passwd 文件按照一个文件 10 行记录的方式进行拆分,又该怎么操作呢?

#使用-N来指定拆分的行数,本例中为-10
[root@roclinux ~]$ split -d -10 /etc/passwd my_passwd_ #可以看到拆分成功
[root@roclinux ~]$ wc -l my_passwd_*
10 my_passwd_00
10 my_passwd_01
5 my_passwd_02
25 total

合并后的校验不可少

需要注意的是,在通过网络来传输大文件,或者在设备之间复制大文件的时候,可能会出现传输前后数据不一致的情况。



使用 split 来拆分大文件仅仅是故事的开始,操作完毕后化零为整、完璧归赵才是完美的结局。因此需要在合并文件后进行文件的完整性校验,推荐使用 md5sum 来计算和比对前后两个大文件的 md5 值。

#对原先的文件计算md5值
[root@roclinux ~]$ md5sum king_of_ring.avi
eacff27bf2db99c7301383b7d8c1c07c king_of_ring.avi #对合并后的文件计算md5值, 并与原值进行比较
[root@roclinux ~]$ md5sum king_of_ring_merge.avi
eacff27bf2db99c7301383b7d8c1c07c king_of_ring_merge.avi

如果前后一致,那么恭喜你,文件合并成功!



好了,split 学完了,我们也可以和朋友一起欣赏惊险刺激的美国大片了!

 
http://c.biancheng.net/linux/split.html
 

split命令_Linux split命令:切割(拆分)文件的更多相关文章

  1. history附上时间戳,history命令_Linux history命令:查看和执行历史命令

    起因是这样的,一台机器客户反馈连接不上,说没有任何操作.好吧,排查吧. 1.第一步先看网络是否通: 从图中可以看到一开始是一直不通的.然后就通了,问了客户有没操作重启什么的结果说没有任何操作,还让给个 ...

  2. awk命令_Linux awk 命令用法详解

    本文索引 awk命令格式和选项 awk模式和操作 模式 操作 awk脚本基本结构 awk的工作原理 awk内置变量(预定义变量) 将外部变量值传递给awk awk运算与判断 算术运算符 赋值运算符 逻 ...

  3. time命令_Linux time命令:测量命令的执行时间或者系统资源的使用情况(转)

    原文地址:http://m.biancheng.net/linux/time.html 这里我们要学习的 time 命令是用来测量 Linux 程序执行时间的命令,而不是用来显示系统时间的命令.不是吧 ...

  4. xargs命令_Linux xargs命令:一个给其他命令传递参数的过滤器

    本文要为大家介绍的命令是 xargs,我们把它称为护花使者,因为它总是乐于协助其他的命令来完成一些事情.下面一起来看看它是如何护花的. xargs 是 execute arguments 的缩写,它的 ...

  5. 按行切割大文件(linux split 命令简版)

    按行切割大文件(linux split 命令简版) #-*- coding:utf-8 -*- __author__ = 'KnowLifeDeath' ''' Linux上Split命令可以方便对大 ...

  6. Linux split 命令用法详解 - 切割文件[转]

    功能说明:切割文件.语 法:split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切 ...

  7. Linux 命令之split(将一个大文件根据行数平均分成若干个小文件)

    把一个 txt 文件导入到 excel 中,但是 excel 单列支持的行数为 1048576,而我需要导入的 txt 文件总共有 7945674 ,我们无法一次性将整个 txt 文件里面的内容导入到 ...

  8. Linux命令(十二) 分割文件 split 合并文件 join

    一.分割文件 split 命令介绍 当处理文件时,有时需要将文件做分割处理,split 命令用于分割文件,可以分割文本文件,按指定的行数分割,每个分割后的文件都包含相同的行数.split 可以分割非文 ...

  9. Linux 150命令之查看文件及内容处理命令 more split file diff paste wc dps2unix

    more命令 使用more命令显示more /var/log/boot.log-20171129文件,可以从图中看出,系统在显示满一个屏幕时暂停,使用空格可以翻页,使用Q键可以退出. split sp ...

随机推荐

  1. Kubernetes使用metric-server让HPA弹性伸缩运行

    监控架构概述 kubernetes监控指标大体可以分为两类:核心监控指标和自定义指标,核心监控指标是kubernetes内置稳定可靠监控指标,早期由heapster完成,现由metric-server ...

  2. Go Protobuf(比xml小3-10倍, 快20-100倍)

    简介 Protocol Buffers是什么? protocol buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小.更快.更为简单.你可以定义数据 ...

  3. 记一次metasploitable2内网渗透之samba服务的攻击

    80端口中对应一些web靶场,在这里不记录 111端口的利用是向rpcbind服务的UDP套接字发送60字节载荷,便可填充目标内存,搞崩主机系统.在这里也不记录 Samba服务简介 Samba是在Li ...

  4. 一般实现分布式锁都有哪些方式?使用redis如何设计分布式锁?使用zk来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?

    #(1)redis分布式锁 官方叫做RedLock算法,是redis官方支持的分布式锁算法. 这个分布式锁有3个重要的考量点,互斥(只能有一个客户端获取锁),不能死锁,容错(大部分redis节点创建了 ...

  5. kubernetes node SchedulingDisabled

    问题: k8s 集群的节点处于 SchedulingDisabled 解决方案 kubectl patch node NodeName -p "{\"spec\":{\& ...

  6. 持续集成 简介&环境搭建

    1. 持续集成简介 2. 持续集成环境搭建(Jenkins) 2.1 Git 安装 2.2 JDK 1.8 安装 2.3 Tomcat 安装 2.4 Maven 简介和安装 2.5 Jenkins 安 ...

  7. kafka listeners和advertised配置

    kafka  listeners和advertised配置 kafka版本:kafka_2.11-2.3.0 kafka配置listeners # The address the socket ser ...

  8. 探秘神奇的运动路径动画 Motion Path

    CSS 中有一个非常有意思的模块 -- CSS Motion Path Module Level 1,翻译过来也就是运动路径.本文将对 motion path 一探究竟,通过本文,你可以了解到: 什么 ...

  9. IDAPython类库---idaapi.py的源码

    #ThisfilewasautomaticallygeneratedbySWIG(http://www.swig.org).#Version2.0.12##Donotmakechangestothis ...

  10. POJ2195费用流+BFS建图

    题意:       给你一个n*m的地图,上面有w个人,和w个房子,每个人都要进房子,每个房子只能进一个人,问所有人都进房子的路径总和最少是多少? 思路:       比较简单的最大流,直接建立两排, ...