大きいファイルを安全に分割保存|split -b/-n と catで結合する手順

ファイル操作/圧縮

「外付け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 は利用可。GNU split--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 4G4ギビバイト相当(実装によりGiB/GB差あり)。余裕を持って設定。
  • テキスト分割に -b を使う行単位なら -l を使う(CSVログなど)。
  • macOS で --additional-suffix が無いプレフィックスに「.」を含める命名で代替(例:"file.tar.gz.")。
  • 破損検知ナシで搬送各パートのハッシュを作り、受け取り側で -c 検証。
  • 分割前に圧縮しない:多数小ファイルなら先に tar -czf - で固めてから分割した方が効率的。

まとめ

  • split -b(サイズ)/-n(等分) で大容量ファイルを安全に分割、cat で確実に結合
  • ソート事故を防ぐには 数値サフィックス+ゼロ埋め(-d -a が鉄板。
  • 実運用では ハッシュ検証・一時フォルダでの復元テスト・ローテーションをセットに。
  • 小分け搬送・FAT32制限回避・メール/クラウド配布など、分割保存はバックアップの強力な選択肢です。

まずは手元の大容量ファイルで、4GB分割 → 結合 → ハッシュ検証を試して、正しく戻せることを確認してみましょう。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント