溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Linux下如何使用split對(duì)文件進(jìn)行切分

發(fā)布時(shí)間:2022-01-26 11:26:41 來(lái)源:億速云 閱讀:141 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹Linux下如何使用split對(duì)文件進(jìn)行切分,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

split可以將一個(gè)大文件分割成多個(gè)小文件,有時(shí)候需要將問(wèn)卷分割成更小的片段,比如提高可讀性,生成日志。

Linux下如何使用split對(duì)文件進(jìn)行切分

合久必分

首先,先使用 dd 命令來(lái)生成一個(gè) 700MB 文件來(lái)作為我們的拆分對(duì)象:

[root@roclinux ~]$ dd if=/dev/zero bs=1024 count=700000 of=king_of_ring.avi
700000+0 records in700000+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

美國(guó)大片的文件大小是 700MB,而我手邊僅有的兩個(gè)優(yōu)盤(pán),都是 512MB 大小的。我打算把文件以 400MB 作為一個(gè)拆分單位,來(lái)進(jìn)行拆分。這里使用到了 split 的-b選項(xiàng),來(lái)指定每個(gè)拆分文件的大?。?/p>

[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 兩個(gè)文件,這么奇怪的名字?

是的,你沒(méi)看錯(cuò),在沒(méi)有明確指定拆分后文件的命名方式的情況下,split 會(huì)默認(rèn)采用 x 字符作為文件前綴,采用類(lèi)似 aa、ab、ac 的字符串依次作為文件后綴。于是,就出現(xiàn)了我們上面看到的 xaa、xab 了。

從文件大小來(lái)看,如我們所愿,電影文件的確被切割成了一個(gè) 400MB 的文件、一個(gè) 300MB 的文件,終于可以裝到兩個(gè)優(yōu)盤(pán)里了。

知其然,知其所以然

知道了拆分命令后,我們來(lái)一起學(xué)習(xí)一下 split 的命令格式和常用選項(xiàng)。

split 的作用很好描述,就是將文件按照一定規(guī)則進(jìn)行拆分。一般情況下,我們可以按照文件大小來(lái)進(jìn)行拆分,如果是文本文件的話,還可以按照行數(shù)來(lái)進(jìn)行拆分,默認(rèn)是 1000 行作為一個(gè)拆分單位。

默認(rèn)情況下,分割后的文件的名稱(chēng)會(huì)以 x 作為前綴,以 aa、ab、ac 這樣的雙字母格式作為后綴,形成 xaa、xab 這樣的名稱(chēng)格式。

我們來(lái)一起看看 split 的命令格式:

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

最常用的選項(xiàng),都在這里了:

  • -b:指定按多少字節(jié)進(jìn)行拆分,也可以指定 K、M、G、T 等單位。
  • -或-l:指定每多少行要拆分成一個(gè)文件。
  • 輸出文件名前綴:設(shè)置拆分后的文件的名稱(chēng)前綴,split 會(huì)自動(dòng)在前綴后加上編號(hào),默認(rèn)從 aa 開(kāi)始。
  • -a:默認(rèn)的后綴長(zhǎng)度是 2,也就是按 aa、ab、ac 這樣的格式依次編號(hào)。

分久必合

完成了美國(guó)大片的拆分,我趕赴朋友家,打開(kāi)他的電腦,優(yōu)盤(pán)插上,使用 cat 命令將拆分文件 xaa 和 xab 合并成一個(gè)文件,可以看出合并后的文件和源文件的大小是一致的:

[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

對(duì)了,如果是在 Windows 下的話,我們要先運(yùn)行 cmd,然后用 copy 命令來(lái)進(jìn)行文件的合并:

copy /b xaa + xab king_of_ring.avi

格式上和 Linux 有些區(qū)別,但原理是一樣的。

設(shè)置拆分文件的名稱(chēng)前綴

上面例子中,我們沒(méi)有指定拆分文件的名稱(chēng)前綴,結(jié)果拆分后的文件名都是 aa、ab 這樣的名稱(chēng),這樣的名稱(chēng)既不達(dá)意也不美觀。

下面的例子,我們嘗試以 king_of_ring_part_ 作為拆分后文件的名稱(chēng)前綴:

#我們指定了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

文件名的可讀性是不是提高了不少,從文件名稱(chēng)就可以看出來(lái)是美國(guó)大片的拆分文件啦。

設(shè)置數(shù)字后綴

如果大家看不慣以 aa、ab 這種字母作為文件后綴,我們還可以通過(guò)-d選項(xiàng)來(lái)指定數(shù)字形式的文件后綴:

#使用了-d選項(xiàng)[root@roclinux ~]$ split -b 400m -d king_of_ring.avi king_of_ring_part_#后綴從原來(lái)的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

對(duì)于中國(guó)人來(lái)說(shuō),數(shù)字形式的后綴,增加了文件名稱(chēng)的可讀性。

按照行數(shù)進(jìn)行拆分

前面我們講的是按照文件大?。ㄈ?400MB)進(jìn)行文件拆分的方法,但是并非所有情況都適合于用文件大小作為拆分單元。比如,我們希望把 /etc/passwd 文件按照一個(gè)文件 10 行記錄的方式進(jìn)行拆分,又該怎么操作呢?

#使用-N來(lái)指定拆分的行數(shù),本例中為-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

合并后的校驗(yàn)不可少

需要注意的是,在通過(guò)網(wǎng)絡(luò)來(lái)傳輸大文件,或者在設(shè)備之間復(fù)制大文件的時(shí)候,可能會(huì)出現(xiàn)傳輸前后數(shù)據(jù)不一致的情況。

使用 split 來(lái)拆分大文件僅僅是故事的開(kāi)始,操作完畢后化零為整、完璧歸趙才是完美的結(jié)局。因此需要在合并文件后進(jìn)行文件的完整性校驗(yàn),推薦使用 md5sum 來(lái)計(jì)算和比對(duì)前后兩個(gè)大文件的 md5 值。

#對(duì)原先的文件計(jì)算md5值[root@roclinux ~]$ md5sum king_of_ring.avi
eacff27bf2db99c7301383b7d8c1c07c  king_of_ring.avi#對(duì)合并后的文件計(jì)算md5值, 并與原值進(jìn)行比較[root@roclinux ~]$ md5sum king_of_ring_merge.avi
eacff27bf2db99c7301383b7d8c1c07c  king_of_ring_merge.avi

以上是“Linux下如何使用split對(duì)文件進(jìn)行切分”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI