Linux下如何使用split对文件进行切分(linux,split,开发技术)

时间:2024-04-28 18:31:50 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

split可以将一个大文件分割成多个小文件,有时候需要将问卷分割成更小的片段,比如提高可读性,生成日志。

Linux下如何使用split对文件进行切分

合久必分

首先,先使用 dd 命令来生成一个 700MB 文件来作为我们的拆分对象:

[root@roclinux~]$ddif=/dev/zerobs=1024count=700000of=king_of_ring.avi700000+0recordsin700000+0recordsout716800000bytes(717MB)copied,12.9189s,55.5MB/s[root@roclinux~]$ls-lking_of_ring.avi-rw-r--r--1rootroot716800000Apr1213:01king_of_ring.avi

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

[root@roclinux~]$split-b400Mking_of_ring.avi[root@roclinux~]$ls-ltotal1400008-rw-r--r--1rootroot716800000Apr1213:01king_of_ring.avi-rw-r--r--1rootroot419430400Apr1213:04xaa-rw-r--r--1rootroot297369600Apr1213:04xab

看!分身完毕!咦,怎么多出了 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~]$catxaaxab>king_of_ring_merge.avi[root@roclinux~]$ls-ltotal2100012-rw-r--r--1rootroot716800000Apr1213:01king_of_ring.avi-rw-r--r--1rootroot716800000Apr1213:07king_of_ring_merge.avi-rw-r--r--1rootroot419430400Apr1213:04xaa-rw-r--r--1rootroot297369600Apr1213:04xab

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

copy/bxaa+xabking_of_ring.avi

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

设置拆分文件的名称前缀

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

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

#我们指定了king_of_ring_part_前缀[root@roclinux~]$split-b400mking_of_ring.aviking_of_ring_part_#可以看到,文件名的可读性提高了很多[root@roclinux~]$ls-lking*-rw-r--r--1rootroot716800000Feb2518:29king_of_ring.avi-rw-r--r--1rootroot419430400Feb2519:24king_of_ring_part_aa-rw-r--r--1rootroot297369600Feb2519:24king_of_ring_part_ab

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

设置数字后缀

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

#使用了-d选项[root@roclinux~]$split-b400m-dking_of_ring.aviking_of_ring_part_#后缀从原来的aa、ab变成了00、01[root@roclinux~]$ls-lking*-rw-r--r--1rootroot716800000Feb2518:29king_of_ring.avi-rw-r--r--1rootroot419430400Feb2519:24king_of_ring_part_00-rw-r--r--1rootroot297369600Feb2519:24king_of_ring_part_01

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

按照行数进行拆分

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

#使用-N来指定拆分的行数,本例中为-10[root@roclinux~]$split-d-10/etc/passwdmy_passwd_#可以看到拆分成功[root@roclinux~]$wc-lmy_passwd_*10my_passwd_0010my_passwd_015my_passwd_0225total

合并后的校验不可少

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

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

#对原先的文件计算md5值[root@roclinux~]$md5sumking_of_ring.avieacff27bf2db99c7301383b7d8c1c07cking_of_ring.avi#对合并后的文件计算md5值,并与原值进行比较[root@roclinux~]$md5sumking_of_ring_merge.avieacff27bf2db99c7301383b7d8c1c07cking_of_ring_merge.avi
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Linux下如何使用split对文件进行切分的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Linux下如何使用FIM查看图像下一篇:

14 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18