エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


Linuxのsplitコマンドは指定したサイズにファイルを分割する

      2020/08/24

splitコマンドでファイルを指定したサイズに分割する

 

splitは指定したサイズにファイルを分割する

 
Linuxのテキストを操作するコマンドの紹介として、今回は「split」コマンドを紹介します。
 
splitコマンドはファイルを指定したサイズに分割します。
 
例えば、
error.logのファイルが GB単位の大きなファイルになってしまい、エラーの内容を確認するときにもトラブルが発生する、と言うようなときに、error.logを 10MB単位のファイルに分割する、と言った場合や
 
zipファイルが大きすぎてメールで送信するのには問題があるため、ファイルを分割してから送信する。受信した側で分割したファイルを結合して元に戻してもらう、と言った場合
 
に使います。
 
 
「split」コマンドは、指定した行数だけ表示する「head」「tail」コマンドや、テキストファイルをページ単位で表示する「more」「less」コマンドとは違い、実際にファイルを小さく分割して、ファイルの操作をしやすくすることができます。
 
ちなみに、splitコマンドで分割したファイルは、catコマンドなどで結合します。
これについては後ほど解説します。
 
 

ファイルを指定したサイズで分割する「split」コマンド

 
「split」コマンドは、指定されたサイズでファイルを分割します。
 
 

splitコマンドの基本的な使用例

 
「split」コマンドの基本的な使用例としては以下のようになります。
ログファイル(error.log)などの大きなファイルを指定したサイズに分割するときなどに使用します。
 

 
ここでは「-b 10M」を指定していますので、10MB単位(1024の累乗)で分割しています。
 
分割後のファイル名は「error.log-」と指定していますので、この「error.log-」に「aa」「ab」「ac」...と順番に付与されたファイル名で生成されていきます。
 
 

 
また、上記のように、分割サイズも分割後のファイル名も指定しなかった場合は、デフォルトのサイズ設定は「1000行」となっていますので、1000行を 1ファイルとして分割します。
 
また、分割後のファイル名は、デフォルトでは「x」が設定されていますので、それに接尾辞が「aa」「ab」「ac」と付与されていきますので、実際のファイル名は「xaa」「xab」「xac」...として作成されていきます。
 
 

splitで分割したファイルは catコマンドで結合する

 
分割したファイルを連結する場合は「cat」コマンドを使用します。
 

上記のように明示的にファイルを記述する方法もありますが、下記のようにメタキャラクタを使って複数のファイルをまとめて指定する方法もあります。
 

 
 
catコマンドについて下記に記事を書いていますので、あわせて参考にしてください。
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
 
 

splitコマンドのオプションについて

 
「split」コマンドのオプションとしては、下記のものがあります。
大きく分けて、ファイルを分割する条件を指定するオプション、分割して作成される接尾辞を指定するオプション、その他、です。
 

オプション 説明
-b、–bytes=サイズ 分割するファイルのサイズを指定する
-l、–line=行数 分割する行数を指定する
-C、–line-bytes=サイズ 分割ファイルに含める行の最大サイズを指定する
-a、–suffix-length=長さ 接尾辞の長さを指定する
-d、–numeric-suffixes 接尾辞を英字ではなく数字にする
–additional-suffix=文字列 ファイル名の末尾に文字列を追加する
-n、–number=個数 指定した数のファイルに分割する
-e、elide-empty-files -nオプション使用時に空のファイルを作成しない(-nで指定するファイルサイズに対して大きな値を指定すると空のファイルができることがある)
-u、–unbuffered -nオプション使用時にバッファリングしないで入力を出力にコピーする
–filter=コマンド コマンドに対してファイル名を出力する
–verbose 出力ファイルを開く前に診断メッセージを表示する

 
 

-bオプションで分割するファイルのサイズを指定する

 
最初の基本的な使用例で紹介しましたが、「-b」オプションは、分割するファイルのサイズを指定する際に使用します。
 

 
ここでは「-b 10M」を指定していますので、10MB単位(1024の累乗)で分割しています。
 
分割後のファイル名は「error.log-」と指定していますので、この「error.log-」に「aa」「ab」「ac」...と順番に付与されたファイル名で生成されていきます。
 
 
この例では、「10M」を指定していますので、1ファイルのサイズは 10MBとなります。
ここで言う「10MB」は「10 × 1024 × 1024」です。
 
「10 × 1000 × 1000」で区切りたい場合は、「10MB」を指定する必要があります。
 
同様に、K、M、G、T、P、E、Z、Yを単位として指定した場合は、「1024」の累乗となります。
また、KB、MB、GB、TB、PB、EB、ZB、YBの単位を指定した場合は、「1000」の累乗となります。
 
 
ただし、「-b」オプションの欠点は、指定のサイズになった場所でファイルを分割するため、行の途中であってもファイルを分割する点です。
 
そのため、上記の「error.log」の場合は、行の途中でファイルが分割されている場合もあるのです。
 
メールで送信するためにファイルを分割し、あとから結合して使うような場合は「-b」オプションで全く問題ありませんが、分割したファイルを分割したファイルとして活用する場合には行単位で分割してほしいと思う場合もあります。
 
そんなときに使用するのが、次項の「-C」オプションです。
 
 

-Cオプションで分割するファイルのサイズを指定するが、改行を考慮する

 
前項の「-b」オプションは、行の途中であるか否かを区別せず、指定したサイズでファイルを分割します。
 
ですが、「-C」オプションでは、改行を意識して、指定したサイズより大きくならないようにファイルを分割してくれます。
 
例えば、1001行目で指定の 10MBを超えるならば、1000行目までで 1つのファイルになるように分割してくれます。
 
そのため、ログファイルのように分割したあとのファイルを利用する場合は、行単位で分割してくれる「-C」オプションの方が便利です。
 
 
コマンドの記述形式は「-b」と同じです。
 

 
「-C」では行単位でファイルを分割しますので、指定したサイズできっちり分割されることは多くありません。
 
また、「-b」オプションと同じく「MB」などの単位付きのサイズを指定することもできるようになっています。
 
 

-lオプションで分割するファイルの行数を指定する

 
前々項の「-b」オプションはファイルサイズで分割しましたが、「-l」では行数で分割を行います。
 

 
上記では「1000(行)」を指定していますが、オプションを指定しない場合は、上記の「-l 1000」が指定されたものとしてします。
 
 
「wc」コマンドは、文字数や行数をカウントするコマンドで、「-l」オプションを使用することでファイルの行数を表示します。
 
wcコマンドについて下記に記事を書いていますので、あわせて参考にしてください。
Linuxの wcコマンドでファイルの行数、単語数、バイト数、文字数をカウントする
 
 
「-l」オプションでは、「-b」オプションと異なり、「1K」「1MB」といった単位付きの指定をすることはできません。
 
 

-nオプションで分割するファイルの数を指定する

 
前項までで解説したオプションは、分割するファイルをサイズ、行数で指定する方式でしたが、「-n」オプションは、分割後のファイルの数を指定する方式です。
 
 
具体例としては、下記のように「-n 3」を指定すると、ファイルサイズが全く同じ 3ファイルに分割します。
 

 
 
上記の方法では、「-b」オプションと同じように改行位置とは無関係にファイルを分割しますので、「-C」のように改行位置に合わせて分割したい場合は「-n l/3」のように数値の前に「l/(エル、スラッシュ)」を追加します。
 

 
 
また、分割するファイルのうち、指定した箇所のみ出力する方法も用意されています。
 

 
上記の例では「-n 3」を指定すると、ファイルを 3分割し 3ファイルを作成します。
 
しかし、実際には 3分割したうちの 2ファイル目の範囲の情報があれば足りる、という場合は、その 2ファイル目だけ出力する、という方法があります。
 
それが、「 -n 2/3」のように「3」の前に「2/」を追記する方法で、3分割したうちの 2番目の部分のみを標準出力します。
これをリダイレクトを使って「error-2-3.log」に出力をしています。
 
 
ちなみに、ここでも「l/(エル、スラッシュ)」を追記して行単位で分割することもできます。
 
 

-aオプションで分割するファイルの接尾辞の長さを指定する

 
前項までのオプションは、ファイルを分割する条件を指定するオプションでしたが、ここからは分割したファイルに付与される接尾辞を指定するためのオプションです。
 
最初の「-a」オプションは、接尾時の長さを指定します。
デフォルトでは接尾時は「aa」「ab」「ac」...と付与されますが、これは「-a 2」が設定されている状態と同じ、2文字となっています。
 
下記の例では、接尾辞を 4文字にする設定です。
 

 
 
ちなみに、分割するファイルに対して、接尾辞が足りなくなる場合は下記のようにエラーメッセージが表示されます。
 

 
ただし、接尾辞を使い果たすまでの部分については分割されてファイルに出力されています。
(error.log-a、error.log-b、error.log-c...のファイルは作成されています。)
 
 

-dオプションで分割するファイルの接尾辞を数字にする

 
splitコマンドで分割するファイルには「aa」「ab」「ac」のようにアルファベットを接尾辞として使用します。
 
ですが、これを数値にしたい場合は、下記のように「-d」オプションを指定します。
 

 
 
下記のように「-a」オプションも加え、接尾時の桁数を指定しながら数値に変更することもできます。
 

 
 

「–additional-suffix=」オプションで接尾辞の後ろに文字列を追加する

 
splitで分割したファイルのファイル名は、最後に接尾辞が付与されます。
しかし、その接尾時のさらに後ろになにか共通の文字列を追加したい、という場合は「–additional-suffix=」オプションを使用します。
 
例えば、下記の例では、作成されるファイルに「.log」という拡張子を追加しています。
 

 
 

「–verbose」オプションで処理のメッセージを表示する

 
splitコマンドは、ファイル分割実行時には何もメッセージを表示しませんが、作成したファイルの情報を表示するオプションが「–verbose」です。
 
具体的には、下記のように「–verbose」オプションを追加すると、作成したファイルの情報が逐次表示されます。
 

 
「–verbose」オプションには短縮形がないのがちょっと残念な感じがします。
 
 

head、tailコマンドでファイルの先頭、末尾を表示する

 
今回は「error.log」をサンプルに、大きくなったエラーログを分割する想定で「split」コマンドについて解説をしましたが、ファイルを分割するのではなく、ファイルの先頭や最後の部分を一時的に確認したい、という場合もあるでしょう。
 
そんなときは、head、tailコマンドがあります。
 
headコマンドはファイルの先頭から指定の行数分を表示するというコマンドで、tailコマンドはファイルの最終行から指定の行数文を表示するというコマンドです。
 
例えば、ファイル容量が大きすぎて viコマンドなどで表示するには重たすぎる場合は、下記のように head、tailコマンドを使って 100行だけ表示させる、という方法を取ることもできます。
 

 
また、head、tailコマンドは、その結果を標準出力しますので、ファイルに出力したい場合はリダイレクトを使用します。
 

 
 
head、tailコマンドに関しては、下記に詳細記事を書いていますのであわせて参考にしてください。
Linuxのheadコマンドは先頭行から、tailコマンドは最終行から指定した行を表示する
 
 

more、lessコマンドでページ単位でファイルを表示する

 
前項の head、tailコマンドでは、先頭行、最終行から指定した行を表示しますが、それだけではよく分からない、という場合は、more、lessというページャーコマンドを使う方法もあります。
 
下記のように使うことで、指定したファイルの内容をページ単位で画面表示をします。
これにより、大きなファイルであっても重たくならずに画面表示を行うことができます。
 

 
 
more、lessはページャーとして、下記のように他のコマンドの結果の表示をページ単位で表示する際に組み合わせて使うことが多いのですが、コマンド単体でファイルを表示する機能を持っていますので、上記のように直接ファイルを指定することも可能です。
 

 
 
more、lessコマンドに関しては、下記に詳細記事を書いていますのであわせて参考にしてください。
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
 
catコマンドに関しては、下記に詳細記事を書いていますのであわせて参考にしてください。
less、moreはページャー、ファイルの中身を表示するLinuxのコマンド
 
 
今回の記事では、ファイルを分割する「split」コマンドについて解説をしましたが、ファイルの内容、および、テキスト情報についての操作に関連するコマンドは下記の記事にまとめていますので、あわせて参考にしてください。
cat、less、head、tail、split、sedなどLinuxでファイル、文字列を操作するコマンド

 - Linuxコマンド

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

Linuxで使用される主な環境変数・PATH、HOME、PS1・printenv、set、declare
Linuxで使用される主な環境変数・PATH、HOME、PS1・printenv、set、declare

Linuxに設定されている主な環境変数の解説。PWD、HOSTNAME、USER、LANG、HOME、LOGNAME、PS1、PS2、HISTSIZE、HISTFILE、HISTFILESIZE、TERMなどがある。

Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も

catはLinuxのコマンドで、本来の機能はファイルを連結だが、ファイルの内容を表示する機能のために使うことが多く使用頻度が高い。同種の機能のmore、less、tacコマンドについても解説。

UNIX・Linuxの sedコマンドで特定の文字列を置換する方法

UNIX・Linuxのコマンドで特定の文字列を置換する sedコマンドの使い方と、perlコマンドを使っての方法を解説しています。

Linuxの wcコマンドでファイルの行数、単語数、バイト数、文字数をカウントする
Linuxの wcコマンドでファイルの行数、単語数、バイト数、文字数をカウントする

Linuxの行数、単語数、文字数、バイト数をカウントする「wc」コマンドの使い方の解説。find、lsと組み合わせてファイル数のカウント方法などを解説。

Linuxのbashで変数に値を追加する方法を多数紹介。+=や""を使う方法など
Linuxのbashで変数に値を追加する方法を多数紹介。+=や””を使う方法など

Linuxのbashで変数に値を代入する方法を解説。bashの変数の処理は柔軟で様々な方法を採れる。デリミタなしで値を追加する方法などを解説。

makewhatis、mandbコマンドでLinuxのオンラインマニュアル索引情報を更新
makewhatis、mandbコマンドでLinuxのオンラインマニュアル索引情報を更新

Linuxコマンドのオンラインマニュアルを検索するwhatis、aproposなどのコマンドはwhatisデータベースを対象に検索する。このデータベースを更新するmandb、makewhatisコマンドを解説。

Linuxのnlは行番号を付与してファイルの内容を表示するコマンド
Linuxのnlは行番号を付与してファイルの内容を表示するコマンド

Linuxでファイルを表示する際に行番号を付与するにはcatコマンドにnオプションを使うことでも可能。しかし、行番号を付与する専門のnlコマンドがある。ここではその使い方を詳細に解説。

Linux findコマンドを使ってn日前のファイルを削除する 3つの記述方法
Linux findコマンドを使ってn日前のファイルを削除する 3つの記述方法

作成からn日経ったファイルを削除したい、そんなときにはfindコマンドを使う。コマンドの記述の方法は3種類あり、それぞれを解説。書き易さもあるがスピードに大きく差がある記述方法もある。

Linuxのコマンドの情報を調べるwhich、whereis、whatis、apropos、man
Linuxのコマンドの情報を調べるwhich、whereis、whatis、apropos、man

Linuxのコマンドの実行ファイルやマニュアルの情報を確認するコマンドwhich、whereis、whatis、apropos、manの機能と使い方、似たところと違うところの紹介。

Linuxのタイムスタンプはmtime、ctime、atimeの3種類。touchコマンドで更新する方法
Linuxのタイムスタンプはmtime、ctime、atimeの3種類。touchコマンドで更新する方法

Linuxのファイルのタイムスタンプにはmtime、ctime、atimeの3種類がある。その違いを詳細に解説しつつ、lsで表示するオプション、touchで更新するオプションを解説。