splitコマンドでファイルを分割する方法|行数・サイズ指定やcatでの結合もコマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドP-T, ファイル・ディレクトリ管理コマンド > splitコマンドでファイルを分割する方法|行数・サイズ指定やcatでの結合もコマンド
「巨大なログファイルをエディタで開こうとしたら、端末がフリーズした」
「ファイルが大きすぎてメールに添付できない」
Linuxサーバーの運用では、数GB単位のログファイルを扱うことも珍しくありません。こうした場面で活躍するのがファイル分割コマンドです。

この記事では、split コマンドの実践的な使い方を解説します。
行数やサイズでの分割から、プリフィックス指定、cat での結合、csplit との違いまで網羅しました。
【この記事でわかること】 ・split は1つのファイルを行数やバイト数で複数ファイルに分割するコマンド
・-l オプションで行数指定(例: split -l 5000 access.log log_)、-b でバイト数指定
・プリフィックスを付けると分割ファイルの名前を整理しやすい(xaa→log_aa等)
・分割したファイルは cat で結合して元に戻せる(cat log_* > access_all.log)
・パターンで分割したい場合は csplit、数値サフィックスを付けたい場合は --numeric-suffixes オプションが便利

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

splitコマンドとは?ファイル分割の仕組み

split は、1つのファイルを指定した行数やバイト数で複数のファイルに分割するコマンドです。

分割されたファイルは、デフォルトで xaaxabxac ... という名前で作成されます。先頭の x がプリフィックス(接頭辞)、aa 以降がサフィックス(接尾辞)です。

基本構文は以下の通りです。

# split (オプション) ファイル名 (プリフィックス)

オプションを付けずに実行すると、1000行ごとにファイルを分割します。

splitコマンドの基本的な使い方

1. 行数を指定して分割する(-l)

最もよく使う方法です。ログファイルを一定行数ごとに分割したい場合に使います。

# messages.logを5000行ごとに分割する $ split -l 5000 messages.log $ ls x* xaa xab xac xad xae # 分割されたファイルの行数を確認する $ wc -l xaa 5000 xaa

2. サイズを指定して分割する(-b)

-b オプションでバイト数を指定します。K(キロバイト)、M(メガバイト)、G(ギガバイト)の単位が使えます。

# 100MBごとに分割する $ split -b 100M large-backup.tar.gz # 1GBごとに分割する $ split -b 1G database-dump.sql

3. プリフィックスを指定する

デフォルトの x ではなく、分かりやすい名前を付けられます。

# プリフィックスを「messages_」にして分割する $ split -l 5000 messages.log messages_ $ ls messages_* messages_aa messages_ab messages_ac

プリフィックスの末尾に _. を付けておくと、元のファイルと区別しやすくなります。

4. サフィックスを数字にする(-d)

デフォルトのアルファベット(aa, ab, ac)ではなく、数字(00, 01, 02)にできます。

# サフィックスを数字にして分割する $ split -d -l 5000 messages.log messages_ $ ls messages_* messages_00 messages_01 messages_02

分割ファイルを結合する

分割したファイルを元に戻すには、cat コマンドとリダイレクトを組み合わせます。

# ワイルドカードで結合する $ cat messages_* > messages_merged.log # 結合後にファイルサイズを比較して確認する $ ls -l messages.log messages_merged.log

ワイルドカード * はアルファベット順・数字順に展開されるので、分割ファイルは正しい順番で結合されます。

【重要】結合時の注意点

・バイナリファイル(tar.gz、RPM等)の場合、結合後に md5sum で元ファイルとハッシュを比較してください
-b(バイト分割)で分割したテキストファイルは、行の途中で切れている可能性があります

# ハッシュ値で元ファイルと一致しているか確認する $ md5sum original.tar.gz d41d8cd98f00b204e9800998ecf8427e original.tar.gz $ md5sum merged.tar.gz d41d8cd98f00b204e9800998ecf8427e merged.tar.gz

応用・実務Tips

1. 拡張子を付けて分割する(--additional-suffix)

分割ファイルに拡張子を付けておくと、ファイルの種類が分かりやすくなります。

# .log拡張子を付けて分割する $ split -d -l 5000 --additional-suffix=.log messages.log part_ $ ls part_* part_00.log part_01.log part_02.log

2. 巨大ログファイルの分割解析

数十GBのログファイルを直接 grep するのは時間がかかります。分割してから並列処理すると効率的です。

# ログを分割する $ split -l 100000 access.log chunk_ # 分割ファイルごとにgrepする(バックグラウンドで並列実行) $ for f in chunk_*; do grep "ERROR" > result_ & done $ wait $ cat result_chunk_* > errors.log

3. メール添付やファイル転送用の分割

メールの添付ファイルサイズに制限がある場合、ファイルを分割して送ることがあります。

# 10MBごとに分割する $ split -b 10M report.tar.gz report_part_ # 受信側で結合する $ cat report_part_* > report.tar.gz

csplitとの違い(パターンで分割する)

split は行数やサイズで機械的に分割しますが、csplit(context split)はパターン(正規表現)でファイルを分割できます。

# 「===」という行で区切ってファイルを分割する $ csplit document.txt '/===/' '{*}'

ログファイルを日付ごとに分割したい場合など、特定のパターンを基準にしたい場面では csplit の方が適しています。

トラブルシュート・エラー対処

「split: cannot open 'xxx': No such file or directory」

ファイルパスが間違っています。ls でファイルの存在を確認してください。

結合後のファイルサイズが元と一致しない

以下を確認してください。

・分割ファイルの一部が欠けていないか(ls -l で全ファイルを確認)
・結合時のリダイレクトで上書きしていないか(> を2回実行するとファイルが上書きされる)
・分割ファイルの順番が正しいか(プリフィックスを同じにしていれば、* で正しく展開される)

ディスク容量が不足する場合

分割すると元ファイル+分割ファイルの両方がディスクを消費します。df -h で空き容量を確認してから実行してください。

本記事のまとめ

やりたいこと コマンド
行数を指定して分割する split -l 行数 ファイル名
サイズを指定して分割する split -b 100M ファイル名
プリフィックスを指定して分割する split -l 行数 ファイル名 プリフィックス
サフィックスを数字にする split -d ファイル名
拡張子を付けて分割する split --additional-suffix=.log ファイル名
分割ファイルを結合する cat プリフィックス* > 出力ファイル名
パターンで分割する csplit ファイル名 '/パターン/' '{*}'

大きなファイルを分割して安全に転送・管理できていますか?

コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。