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でもファイル分割することができます。本ブログで紹介しているファイル分割方法をまとめているので気になる方はそちらもご覧ください。
コメント