Linux

Linux 使用 split 指令將大檔案切割成小檔案,方便網路傳輸

這裡介紹如何在 Linux 中使用 split 指令將大檔案切割成小檔案,方便網路傳輸或各種儲存媒體使用。

在 Linux 中若要進行檔案備份或是網路傳輸,有時候會使用 tar 指令將多個檔案壓縮起來,變成一個壓縮檔後才進行後續的動作,而有時候一個壓縮檔如果太大,在傳輸或儲存上可能會不方便,若是遇到這種狀況可以使用 split 將大檔案分割成小檔案。

使用 split 分割檔案

如果要將一個大檔案分割成許多個小檔案,可以使用 split 配合 -b 參數指定每個小檔案的大小,並指定輸出檔名的開頭名稱:

split -b 200M ubuntu.iso "ubuntu.iso.part"

預設的輸出檔案名稱會自動加上英文字母來區隔順序:

split 分割檔案

亦可以使用管線(pipe)結合其它的 Linux 指令,將資料直接分割後再儲存:

tar zcf - datafolder | split -b 200M - "datafolder.part"

如果想要將檔案依據大小均分為固定個數的檔案,可以使用 -n 參數,並指定要分成擠的小檔案,例如若要將 ubuntu.iso 這個檔案均分為 4 個小檔案,則執行:

split -n 4 ubuntu.iso "ubuntu.iso.part"

這樣每個分割出來的檔案其大小都會是相同的:

split 均分檔案內容

使用 cat 合併檔案

使用 split 分割之後的檔案,可以使用 cat 來合併,例如:

cat datafolder.part* > datafolder.tar.gz

或是直接配合管線解壓縮:

cat datafolder.part* | tar zxvf -

檔名結尾

split 預設會使用兩個字母依序為分割的檔案名稱加上結尾,我們可以使用 -a 參數來調整結尾的字母數,若要以三個字母作為結尾,則執行:

split -a 3 -b 200M ubuntu.iso "ubuntu.iso.part"

split 以三個字母作為檔名結尾

如果想要使用數字的方式來作為檔名結尾,可以加上 -d 參數:

split -d -b 200M ubuntu.iso "ubuntu.iso.part"

split 以數字作為檔名結尾

以行數分割檔案

split 除了以固定的檔案大小切割檔案之外,對於文字檔也可以使用固定行數的方式來分割檔案,這裡我產生一個文字檔,然後將這個文字檔每三行儲存為一個小檔案:

ls -l / > mydata.txt
split -l 3 mydata.txt mydata.part

分割出來的檔案中,每個檔案都只有三行文字:

split 以固定行數分割檔案

如果要將文字檔案均分為大小相同的小檔案,但不想要把完整的行切斷,可以使用 -n l/N 參數,其中 N 是分割檔案數,例如:

ls -l / > mydata.txt
split -n l/3 mydata.txt mydata.part

這樣分割出來的檔案就不會有將一行資料切成兩行的問題:

split 以固定大小分割文字檔

輸出至標準輸出

有時候我們會想要將 split 的輸出導向至其他的程式,這時候就可以使用 -n K/N 這種方式,其中 N 是要分割的檔案數目,而 K 是要輸出至標準輸出的部份,例如:

ls -l / > mydata.txt
split -n l/2/3 mydata.txt

這樣會將檔案分為 3 等份,將第二份輸出至標準輸出,而且分割資料時不會把行切斷。

split 輸出至標準輸出

參考資料:Tecmint

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang
標籤: 指令

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

1 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

2 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

2 年 ago