Linuxでファイル分割とファイル結合を実施する方法

スポンサーリンク
このブログではアフィリエイト広告を利用しています。

SEをしていると、Linuxサーバで収集した資料をフロッピーディスクで移動したり、メールで転送したい場合があります。しかし、ファイルサイズが大きすぎて移動できない時は、ファイルを分割する必要があります。

取得したログファイルが大きすぎる場合に、扱いやすいサイズに変更することにも使えます。

スポンサーリンク

ファイル分割方法

Linuxではsplitコマンドを使用してファイルを分割します。分割方法はバイト単位と行数単位が可能です。

バイナリファイルであればバイト単位での分割、テキストファイルでは行数単位での分割がわかりやすいと思います。

また、分割するファイル数を指定することもできます。

バイト単位で分割する

splitコマンド指定方法

split -b [バイト数 ※] [分割元ファイル名] [分割後ベースファイル名]
※単位はK、M、G、T、P、E、Z、Yが指定可

これで「[分割後ベースファイル名]+アルファベット」という形でファイルが作成されます。

コマンド例)ファイルを100MByte単位で分割する

[root@demo temp]# ls -l
合計 512000
-rw-r--r--. 1 root root 524288000 4月 11 20:56 test
[root@demo temp]# split -b 100M test split-
[root@demo temp]# ls -l
合計 1024000
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-aa
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ab
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ac
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ad
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ae
-rw-r--r--. 1 root root 524288000 4月 11 20:56 test

行単位で分割する

splitコマンド指定方法

split -l 行数 [分割元ファイル名] [分割後ベースファイル名]

生成されるファイルはバイト単位と同じく「[分割後ベースファイル名]+アルファベット」という形です。

コマンド例)100行のファイルを20行ごとに分割する

[root@demo temp]# ls -l
合計 4
-rw-r--r--. 1 root root 200 4月 11 21:36 test
[root@demo temp]# cat test | wc -l
100
[root@demo temp]# split -l 20 test split-
[root@demo temp]# ls -l
合計 24
-rw-r--r--. 1 root root 40 4月 11 21:37 split-aa
-rw-r--r--. 1 root root 40 4月 11 21:37 split-ab
-rw-r--r--. 1 root root 40 4月 11 21:37 split-ac
-rw-r--r--. 1 root root 40 4月 11 21:37 split-ad
-rw-r--r--. 1 root root 40 4月 11 21:37 split-ae
-rw-r--r--. 1 root root 200 4月 11 21:36 test

分割するファイル数を指定する

splitコマンド指定方法

split -n 個数 [分割元ファイル名] [分割後ベースファイル名]

コマンド例)3つのファイルに分割する

[root@demo temp]# ls -l
合計 512000
-rw-r--r--. 1 root root 524288000 4月 11 20:58 test
[root@demo temp]# split -n 3 test split-
[root@demo temp]# ls -l
合計 1024004
-rw-r--r--. 1 root root 174762666 4月 11 21:34 split-aa
-rw-r--r--. 1 root root 174762666 4月 11 21:34 split-ab
-rw-r--r--. 1 root root 174762668 4月 11 21:34 split-ac
-rw-r--r--. 1 root root 524288000 4月 11 20:58 test

分割後のベースファイル名に付与されるアルファベットを変更する

デフォルトであれば、分割後ベースファイル名に付与されるアルファベットの文字数は2文字です。

分割するファイル数が少ない時は、1文字でも良いですし、分割するファイルが多い時は2文字では少ない場合があります。

そういう時はオプションを追加することで付与されるアルファベットを変更することができます。

-a:分割後のベースファイル名に付与するアルファベットの文字数を指定する

「-a」オプションを追加することで付与されるアルファベットの文字数を指定できます。

splitコマンド指定方法

split オプション -a 文字数 [分割元ファイル名] [分割後ベースファイル名]

コマンド例1)アルファベットの文字数を1つにする

[root@demo temp]# ls -l
合計 512000
-rw-r--r--. 1 root root 524288000 4月 11 20:58 test
[root@demo temp]# split -b 100M -a 1 test split-
[root@demo temp]# ls -l
合計 1024000
-rw-r--r--. 1 root root 104857600 4月 11 21:21 split-a
-rw-r--r--. 1 root root 104857600 4月 11 21:21 split-b
-rw-r--r--. 1 root root 104857600 4月 11 21:21 split-c
-rw-r--r--. 1 root root 104857600 4月 11 21:21 split-d
-rw-r--r--. 1 root root 104857600 4月 11 21:21 split-e
-rw-r--r--. 1 root root 524288000 4月 11 20:58 test

コマンド例2)アルファベットの文字数を3つにする

[root@demo temp]# ls -l
合計 512000
-rw-r--r--. 1 root root 524288000 4月 11 20:58 test
[root@demo temp]# split -b 100M -a 3 test split-
[root@demo temp]# ls -l
合計 1024000
-rw-r--r--. 1 root root 104857600 4月 11 21:25 split-aaa
-rw-r--r--. 1 root root 104857600 4月 11 21:25 split-aab
-rw-r--r--. 1 root root 104857600 4月 11 21:25 split-aac
-rw-r--r--. 1 root root 104857600 4月 11 21:25 split-aad
-rw-r--r--. 1 root root 104857600 4月 11 21:25 split-aae
-rw-r--r--. 1 root root 524288000 4月 11 20:58 test

-d:分割後のベースファイル名に付与するアルファベットを数字にする

「-d」オプションを追加することで付与されるアルファベットを数字に変更できます。

splitコマンド指定方法

split オプション -d [分割元ファイル名] [分割後ベースファイル名]

コマンド例)付与されるアルファベットを数字に変更する

[root@demo temp]# ls -l
合計 512000
-rw-r--r--. 1 root root 524288000 4月 11 20:58 test
[root@demo temp]# split -b 100M -d test split-
[root@demo temp]# ls -l
合計 1024000
-rw-r--r--. 1 root root 104857600 4月 11 21:27 split-00
-rw-r--r--. 1 root root 104857600 4月 11 21:27 split-01
-rw-r--r--. 1 root root 104857600 4月 11 21:27 split-02
-rw-r--r--. 1 root root 104857600 4月 11 21:27 split-03
-rw-r--r--. 1 root root 104857600 4月 11 21:27 split-04
-rw-r--r--. 1 root root 524288000 4月 11 20:58 test
スポンサーリンク

ファイル結合方法

splitコマンドで分割したファイルはLinux、Windowsどちらでも結合可能です。

Linuxでファイル結合

Linuxでのファイル結合にはcatコマンドを使用します。

catコマンド指定方法

cat [分割後ベースファイル名]* > [結合ファイル名]

コマンド実行例)「split-*」のファイルをtestに結合

 [root@demo temp]# ls -l
合計 512000
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-aa
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ab
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ac
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ad
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ae
[root@demo temp]# cat split-* > test
[root@demo temp]# ls -l
合計 1024000
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-aa
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ab
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ac
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ad
-rw-r--r--. 1 root root 104857600 4月 11 20:56 split-ae
-rw-r--r--. 1 root root 524288000 4月 11 20:58 test

Windowsでファイル結合

Windowsでのファイル結合にはcopyコマンドを使用します。

コマンドプロンプトPowerShellで実施してください。

copyコマンド指定方法

copy /B [分割後ベースファイル名]* [結合ファイル名]

コマンド実行例)「split-*」のファイルをtestに結合

D:\Demo>dir /a-d
 Volume in drive D is Data
 Volume Serial Number is 622A-AAA3

 Directory of D:\Demo

2020/04/11  20:56       104,857,600 split-aa
2020/04/11  20:56       104,857,600 split-ab
2020/04/11  20:56       104,857,600 split-ac
2020/04/11  20:56       104,857,600 split-ad
2020/04/11  20:56       104,857,600 split-ae
               5 File(s)    524,288,000 bytes
               0 Dir(s)  57,840,017,408 bytes free

D:\Demo>copy /B split-* test
split-aa
split-ab
split-ac
split-ad
split-ae
        1 file(s) copied.

D:\Demo>dir /a-d
 Volume in drive D is Data
 Volume Serial Number is 622A-AAA3

 Directory of D:\Demo

2020/04/11  20:56       104,857,600 split-aa
2020/04/11  20:56       104,857,600 split-ab
2020/04/11  20:56       104,857,600 split-ac
2020/04/11  20:56       104,857,600 split-ad
2020/04/11  20:56       104,857,600 split-ae
2020/04/11  21:10       524,288,000 test
               6 File(s)  1,048,576,000 bytes
               0 Dir(s)  57,315,729,408 bytes free

その他の環境のファイル分割

Windowsでもファイル分割することができます。本ブログで紹介しているファイル分割方法をまとめているので気になる方はそちらもご覧ください。

コメント