背景
很多時候,我們需要將一個大檔案拆分成 N 個小檔案,以方便併發或批量處理
命令
在 Linux 系統下就有這樣一個工具:
split [選項]... [輸入 [字首]]複製程式碼
通常,[輸入] 是一個指定路徑的檔案,[字首] 用來標示拆分後的小檔案
[選項] 則主要包括:
-a, --suffix-length=N 指定字尾長度為N (預設為2)
-b, --bytes=大小 指定每個輸出檔案的位元組大小
-C, --line-bytes=大小 指定每個輸出檔案裡最大行位元組大小
-d, --numeric-suffixes 使用數字字尾代替字母后綴
-l, --lines=數值 指定每個輸出檔案有多少行
--verbose 在每個輸出檔案開啟前輸出檔案特徵
--help 顯示此幫助資訊並退出
--version 顯示版本資訊並退出複製程式碼
選項
對於檔案 file.log,執行拆分命令:
split file.log複製程式碼
會在當前目錄下生成以 x
為字首,2
位長度的字母
為字尾命名的小檔案
而且,每個小檔案的行數為 1000
,示例:
-rw-r--r-- 1 root root 33000 4月 28 14:51 xaa
-rw-r--r-- 1 root root 33000 4月 28 14:51 xab
-rw-r--r-- 1 root root 33000 4月 28 14:51 xac
-rw-r--r-- 1 root root 33000 4月 28 14:51 xad
-rw-r--r-- 1 root root 33000 4月 28 14:51 xae
-rw-r--r-- 1 root root 33000 4月 28 14:51 xaf複製程式碼
可以通過選項指定這些引數:
- 指定字首為
prefix_
split file.log prefix_複製程式碼
-rw-r--r-- 1 root root 33000 4月 28 14:59 prefix_aa
-rw-r--r-- 1 root root 33000 4月 28 14:59 prefix_ab
-rw-r--r-- 1 root root 33000 4月 28 14:59 prefix_ac
-rw-r--r-- 1 root root 33000 4月 28 14:59 prefix_ad
-rw-r--r-- 1 root root 33000 4月 28 14:59 prefix_ae
-rw-r--r-- 1 root root 33000 4月 28 14:59 prefix_af複製程式碼
- 指定字尾型別和長度
字尾型別預設為字母
,還可以是數字
,長度預設為2
這樣的話,對於字母型別小檔案最大可用的字尾個數為:
aa ab ac ad ... zz 總共有:26*26=676複製程式碼
對於數字型別小檔案最大可用字尾個數為:
00 01 02 03 ... 99 總共有 10*10=100複製程式碼
因此,在拆分大檔案之前一定要評估好小檔案的數量級,據此來選擇字尾的型別和長度,否則,超出可用字尾範圍的資料將丟失
示例:指定字尾型別為數字,長度為 3
split -d -a 3 file.log prefix_複製程式碼
-rw-r--r-- 1 root root 66 4月 28 15:08 prefix_000
-rw-r--r-- 1 root root 66 4月 28 15:08 prefix_001
-rw-r--r-- 1 root root 66 4月 28 15:08 prefix_002
-rw-r--r-- 1 root root 66 4月 28 15:08 prefix_003
-rw-r--r-- 1 root root 66 4月 28 15:08 prefix_004
-rw-r--r-- 1 root root 66 4月 28 15:08 prefix_005
-rw-r--r-- 1 root root 66 4月 28 15:08 prefix_006複製程式碼
- 指定小檔案大小
- 按照行數拆分,示例:每個小檔案最大 10000 行
split -l 10000 file.log複製程式碼
- 按照位元組數拆分,示例:每個小檔案最大 4M
split -b 4M file.log複製程式碼
總結
以上,便是檔案拆分命令 split 的使用簡介
需要注意的就是,字尾型別和長度的設定,否則會丟失子檔案
還有疑問? 聯絡作者微博/微信 @Ceelog