split 指令筆記

Posted by Adam on August 24, 2022
# `split` 指令筆記 `split` 用來把一個大檔案切割成多個小檔案,常用於處理超大檔案(例如上傳限制、備份分卷、平行處理等場景)。 ## 基本語法 ```bash split [選項] [輸入檔案] [輸出前綴] ``` - 不指定輸入檔案時,預設從 stdin 讀取。 - 不指定輸出前綴時,預設為 `x`,輸出檔名會是 `xaa`, `xab`, `xac`... ## 常用選項 | 選項 | 說明 | |---|---| | `-b SIZE` | 依照**檔案大小**切割,例如 `-b 100M`、`-b 500K`、`-b 1G` | | `-l LINES` | 依照**行數**切割,例如 `-l 1000`(每 1000 行一個檔) | | `-n N` | 切成 **N 等份**(依大小平均分配) | | `-d` | 輸出檔名尾碼用**數字**(00, 01, 02...)取代預設英文字母(aa, ab...) | | `-a N` | 設定尾碼長度為 N 位(預設 2 位) | | `--additional-suffix=.ext` | 幫輸出檔案加副檔名,例如 `.txt` | | `-e` | 不產生空檔案(配合 `-n` 使用) | | `--verbose` | 顯示每個輸出檔的建立過程 | ## 常見範例 ### 1. 依大小切割(每份 100MB) ```bash split -b 100M bigfile.zip part_ ``` 輸出:`part_aa`, `part_ab`, `part_ac` ... ### 2. 依大小切割,並用數字編號 + 副檔名 ```bash split -b 50M -d --additional-suffix=.zip bigfile.zip part_ ``` 輸出:`part_00.zip`, `part_01.zip` ... ### 3. 依行數切割(每 5000 行一個檔) ```bash split -l 5000 data.csv chunk_ ``` ### 4. 平均切成 4 等份 ```bash split -n 4 -d bigfile.dat out_ ``` ### 5. 切割並設定編號長度(尾碼 3 位數) ```bash split -b 10M -d -a 3 bigfile.iso disk_ ``` 輸出:`disk_000`, `disk_001` ... ## 切割後如何合併回原檔? 用 `cat` 依順序合併即可: ```bash cat part_* > bigfile_restored.zip ``` > ⚠️ 注意:合併時檔名的順序要正確(例如 `part_aa`, `part_ab`... 字母排序本身就是正確順序),若用萬用字元 `*`,系統通常會照字母/數字順序排列,但保險起見可以用 `ls` 確認順序後再合併。 ## 小提醒 - 切 CSV / 文字檔時,用 `-l`(行數)比 `-b`(大小)更安全,避免把一行資料切斷在兩個檔案中間。 - 若是要切割二進位檔案(如 zip、iso),只能用 `-b` 或 `-n`,不能用 `-l`。 - macOS 內建的 `split` 是 BSD 版本,選項較少(例如沒有 `-d`、`--additional-suffix`),若需要完整功能可改用 `gsplit`(透過 `brew install coreutils` 安裝)。