# `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` 安裝)。