大きなファイルを分割・結合する方法|splitとcatで効率的に管理

実務レシピ

動画やログ、バックアップデータなど、サイズが大きすぎるファイルを扱うときに「そのままではメールで送れない」「クラウドにアップできない」と困った経験はありませんか?
こうした場合は、ファイルを小さく分割して送信・保存し、必要に応じて結合して元に戻すのが便利です。

LinuxやmacOSのターミナルでは、splitcat というコマンドを使うことで、大きなファイルを効率的に分割・結合できます。

ファイルを分割する方法(split)

split コマンドを使えば、指定したサイズごとにファイルを分割できます。

split -b 100M bigfile.zip part_
  • -b 100M : 100MBごとに分割
  • bigfile.zip : 分割対象のファイル
  • part_ : 分割後のファイル名のプレフィックス(例: part_aa, part_ab …)

この例では、bigfile.zip が 100MB ごとの小さなファイルに分割され、part_aapart_ab という形で保存されます。

行数で分割する場合

テキストファイルを行単位で分割することも可能です。

split -l 1000 logfile.txt log_

この場合、logfile.txt が 1000行ごとに log_aalog_ab といったファイルに分割されます。

分割する個数を指定する場合

「サイズや行数ではなく、何個のファイルに分けるか」を先に決めたい場合は -n オプションを使います。

split -n 4 bigfile.zip part_

この場合、bigfile.zip のサイズを自動計算し、ちょうど4つのファイルに均等分割されます。送信先の容量が決まっていて「◯分割で送りたい」というときに便利です。

分割したファイルを結合する方法(cat)

分割したファイルを元に戻すときは cat コマンドを使います。

cat part_* > bigfile_restored.zip
  • part_* : 分割したファイルを順番に結合
  • > : 出力を新しいファイルに保存
  • bigfile_restored.zip : 復元後のファイル名

これで分割前と同じファイルが再構築されます。

実用シーン

  • 大容量の動画を送るとき:メール添付の制限を回避
  • クラウド保存:アップロード容量制限に合わせて分割
  • バックアップ整理:サイズを指定して複数メディアに保存
  • ログ管理:巨大なログを分割して扱いやすくする

この記事は「大きなファイルを分割して持ち運び、元に戻す」という目的別の手順をまとめています。split コマンド自体の構文やオプションの一覧は split|ファイルを一定サイズ・行数・分割数で分割する にまとめています。

用途別レシピ

FAT32のUSBメモリに収める(4GBの壁)

FAT32でフォーマットされたUSBメモリやSDカードは、1ファイル4GiB未満(4,294,967,295バイト)までしか保存できません。ここで注意したいのが split のサイズ単位です。GNU版の split では GGiB(1024の3乗)を意味するため、-b 4G はちょうど 4,294,967,296 バイトとなり、1バイト超過して FAT32 に書き込めません

# NG: 4GiB ちょうど = FAT32 の上限を1バイト超える
split -b 4G -d -a 3 backup.tar.gz "backup.tar.gz."

# OK: 余裕を持たせる
split -b 3G -d -a 3 backup.tar.gz "backup.tar.gz."

単位は K=1024/KB=1000 のように、2文字表記が10進です。手元の環境では次のように確認できます。

$ split -b 1K  z.bin k. && stat -c%s k.aa
1024
$ split -b 1KB z.bin k. && stat -c%s k.aa
1000

個数を指定して等分する(-n)

1ファイルあたりのサイズではなく「何個に分けるか」を決めたい場合は -n を使います。-d で数値サフィックス、-a で桁数を揃えると、結合時の並び順で事故が起きません。

$ split -n 8 -d -a 3 big.bin "big.bin."
$ ls -1 big.bin.*
big.bin.000
big.bin.001
big.bin.002
big.bin.003
big.bin.004
big.bin.005
big.bin.006
big.bin.007

圧縮と分割を中間ファイルなしで直結する

ディレクトリを丸ごとバックアップして分割したい場合、tar の出力を split にパイプすると、巨大な中間ファイルを作らずに済みます。split の入力ファイル名を - にすると標準入力を読み取ります。

tar -czf - /data | split -b 3G -d -a 3 - "/backup/data.tar.gz."

復元は結合してから展開します。

cat /backup/data.tar.gz.* > data.tar.gz
tar -xzpf data.tar.gz -C /tmp/restore

結合前後でハッシュを検証する

分割ファイルを持ち運ぶ場合は、パーツごとのハッシュを残しておくと破損に気付けます。

# 分割直後:パーツのハッシュ一覧を作成
sha256sum big.bin.* > big.bin.parts.sha256

# 受け取り側:検証(壊れていれば FAILED と出る)
sha256sum -c big.bin.parts.sha256

結合後に元ファイルと完全一致するかは cmp で確認できます。差分がなければ何も出力されません。

cat big.bin.* > restored.bin
cmp big.bin restored.bin && echo "一致しました"

注意点

  • 分割後にファイルをやり取りする場合、すべて揃わないと結合できません。
  • 順番を間違えると正しく復元できないため、part_aapart_abpart_ac … の順序を保ちましょう。
  • 圧縮ファイルを分割する場合は、結合してから解凍する必要があります(zip・tar.gzの解凍方法はtgzを解凍する方法|tar.gzとの違いとWindows・macOS・Linuxでの開き方を参照)。

よくある質問(FAQ)

分割ファイルの名前を連番(数字)にするには?

デフォルトではpart_aaのようにアルファベット2文字の連番になりますが、-dオプションを付けると数字の連番(part_00part_01…)にできます。

split -b 100M -d bigfile.zip part_

結合後のファイルが壊れていないか確認するには?

分割前・結合後それぞれのファイルのハッシュ値を比較すると、正しく復元できたか確認できます。ハッシュ値の計算・比較方法はmd5sum – MD5 ハッシュ値を計算・検証するコマンドで解説しています。

md5sum bigfile.zip
md5sum bigfile_restored.zip

2つの値が一致していれば、分割・結合の過程でデータが壊れていないことが確認できます。

分割したファイル数(何個に分かれるか)を先に知りたい場合は?

split自体に分割数を事前に表示する機能はありませんが、-bで指定したサイズと元ファイルのサイズから概算できます。正確な分割後の個数を確認したい場合は、実行後にls part_* | wc -lで生成されたファイル数を数えられます。あるいは、あらかじめ分割数を決めておきたい場合は前述の-nオプションを使うと確実です。

Windowsにはsplit・catコマンドがないが、どう分割・結合すればいい?

標準のコマンドプロンプトにはsplit相当のコマンドはありませんが、PowerShellであればGet-ContentSet-Contentを組み合わせて行単位に分割できます。またWindows Subsystem for Linux(WSL)やGit Bashを使えば、本記事で紹介したsplit / catコマンドをそのまま利用できます。手軽さを優先するなら、7-ZipなどのGUI圧縮ツールで分割書庫を作成する方法もあります。

まとめ

大きなファイルを効率的に管理するには、split で分割し、必要なときに cat で結合する方法が便利です。

  • サイズや行数で自由に分割できる
  • 容量制限のある環境でも柔軟に対応可能
  • 元に戻すのも簡単で安全

大容量ファイルで困っている方は、この方法を取り入れてみてください。

Bash玄

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

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

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

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

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

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

Bash玄をフォローする

コメント