「外付けHDDが FAT32で4GB制限」「クラウドへ段階的にアップしたい」「メールで小分け配布したい」——そんなときに便利なのが split での分割保存です。ここでは コピペで動く最短レシピ → 用途別の分割術 → 結合・検証 まで、実運用に必要なポイントを一気にまとめます(Linux/macOS対応)。
最短レシピ(コピペ可)
4GBごとに分割(FAT32対策/数値サフィックス)
# 例: big.iso を 4GBごとに分割
split -b 4G -d -a 3 big.iso "big.iso."
# 生成: big.iso.000, big.iso.001, big.iso.002 ...
結合(元ファイルへ復元)
# 分割ファイルがすべて同じディレクトリにある前提
cat big.iso.* > big.iso
ポイント
-b 4Gは バイト単位での分割サイズ(M,Kも可)。-dで 数字サフィックス、-a 3で桁数(000〜)。
ソート順が崩れないので結合が安全(cat big.iso.*で昇順連結される)。
split の基本(よく使うオプション)
| オプション | 意味 / 効果 | 例 |
|---|---|---|
-b SIZE | サイズで分割(4G, 700M など) | -b 4G |
-n N | ほぼ等分で N 分割(サイズ未指定) | -n 8 |
-l N | 行数で分割(テキスト用) | -l 1000 |
-d | サフィックスを数字にする | -d |
-a N | サフィックス桁数(ゼロ埋め) | -a 4 → 0000〜 |
macOS(BSD
split)でも-b/-n/-l/-d/-aは利用可。GNUsplitの--additional-suffixは無いことがあります。
拡張子を付けたいときは プレフィックス側に「.」を含めるのが簡単です(例:"archive.tar.gz.")。
用途別レシピ
1) “等分”で分けたい(容量未定 → N分割)
# 大容量ファイルを 8 分割
split -n 8 -d -a 3 backup.tar.gz "backup.tar.gz."
# → backup.tar.gz.000 ~ .007
2) 進捗を見たい(pv 併用)
# pv がインストールされていれば進捗が見られる
pv big.img | split -b 2G -d -a 3 - "big.img."
3) ハッシュで“壊れ防止”チェック
# 分割ファイルそれぞれのハッシュ一覧を作成
sha256sum big.iso.* > big.iso.parts.sha256
# 後日検証
sha256sum -c big.iso.parts.sha256
4) ネットワーク越しに“受け取りながら”分割保存
# 送信側(圧縮して転送)
tar -czf - /path/to/dir | ssh user@host "cat > /tmp/archive.tar.gz"
# 受信側(サーバーで分割保存)
split -b 2G -d -a 3 /tmp/archive.tar.gz "/backup/archive.tar.gz."
5) tar.gz と組み合わせ(丸ごと→分割)
# 圧縮と分割をストリームで直結(中間ファイルを作らない)
tar -czf - /data \
| split -b 3G -d -a 3 - "/backup/$(date +%F)-data.tar.gz."
結合(復元)と検証
1) 結合の安全手順
# 1) ファイル数と順序を確認
ls -1v archive.tar.gz.* # 数字順に見やすく表示
# 2) 結合(元に戻す)
cat archive.tar.gz.* > archive.tar.gz
順序が命:
-d -a Nで桁数を揃えていれば*展開の昇順でOK。
不安ならsort -Vを併用して安全に:
# より安全な結合例(バージョン順ソート)
cat $(ls -1 | grep '^archive\.tar\.gz\.[0-9]\{3\}$' | sort -V) > archive.tar.gz
2) 圧縮アーカイブの展開(復元テスト)
# 復元はまず一時ディレクトリで
mkdir -p /tmp/restore
tar -xzpf archive.tar.gz -C /tmp/restore
3) 完整性チェック(推奨)
# 結合後の単一ファイルに対するハッシュ
sha256sum archive.tar.gz > archive.tar.gz.sha256
sha256sum -c archive.tar.gz.sha256
自動化テンプレ(分割バックアップ+ローテ)
# /usr/local/sbin/split_backup.sh
#!/usr/bin/env bash
set -euo pipefail
umask 077
STAMP=$(date +%F)
SRC="/srv/data"
OUT="/backup/${STAMP}-data.tar.gz"
PART_PREFIX="${OUT}."
# 圧縮 → 3GBごとに分割
tar -czf - "$SRC" \
| split -b 3G -d -a 3 - "$PART_PREFIX"
# パーツのハッシュ一覧作成
( cd /backup && sha256sum "$(basename "$OUT")."* > "$(basename "$OUT").parts.sha256" )
# crontab(毎日02:30)
MAILTO=""
30 2 * * * bash /usr/local/sbin/split_backup.sh
# ローテーション(30日超を削除:まずは echo でドライラン)
find /backup -name '*-data.tar.gz.*' -mtime +30 -exec echo rm -f {} +
よくある落とし穴(回避策)
- 結合順序ミス:
-d -a 3などでゼロ埋め。ls -1v/sort -Vで順序確認。 - サイズ単位の勘違い:
-b 4Gは 4ギビバイト相当(実装によりGiB/GB差あり)。余裕を持って設定。 - テキスト分割に
-bを使う:行単位なら-lを使う(CSVログなど)。 - macOS で
--additional-suffixが無い:プレフィックスに「.」を含める命名で代替(例:"file.tar.gz.")。 - 破損検知ナシで搬送:各パートのハッシュを作り、受け取り側で
-c検証。 - 分割前に圧縮しない:多数小ファイルなら先に
tar -czf -で固めてから分割した方が効率的。
まとめ
split -b(サイズ)/-n(等分) で大容量ファイルを安全に分割、catで確実に結合。- ソート事故を防ぐには 数値サフィックス+ゼロ埋め(
-d -a) が鉄板。 - 実運用では ハッシュ検証・一時フォルダでの復元テスト・ローテーションをセットに。
- 小分け搬送・FAT32制限回避・メール/クラウド配布など、分割保存はバックアップの強力な選択肢です。
まずは手元の大容量ファイルで、4GB分割 → 結合 → ハッシュ検証を試して、正しく戻せることを確認してみましょう。

コメント