試した環境
本題
ファイル分割する際、ファイル名のつけ方で色々な要望があると思います。
私がファイル名のつけ方でやりたかったことが bash のsplit
コマンドのオプションに用意されておりました。
その機能を紹介します。
連番で出力する
連番で出力するには、-d
オプションを指定します。
このオプションを指定しない場合、
split
コマンドは出力ファイル名に連番ではなくアルファベットを振ります。
連番の開始番号を指定する
連番の開始番号を指定するには、-d
オプションを指定する代わりに、--numeric-suffixes
オプションを指定します。
例えば1から始めたい場合は、--numeric-suffixes=1
と指定します。
-d
オプションでは開始番号は指定できません。
ちなみに、-d
オプションでは連番は0から開始します。
連番の桁数を指定する
連番の桁数を指定するには、-a
オプションを指定します。
例えば5桁にしたい場合は、-a 5
と指定します。
このオプションは出力ファイル数を増やしたいときにも使用します。
連番の桁数はデフォルトは2桁です。
しかしファイル名に振られる数字が99まで達すると、それ以降のファイルは出力されません。
100以上分割したい場合、-a 3
と指定することで出力ファイルに振られる数字の上限が999になり出力ファイル数が増やせます。
また、例えば前項の連番開始番号指定で--numeric-suffixes=100
とした場合、
-a
オプションで3以上を指定しなければなりません。
連番後に文字列を付加する
後ろに文字列を付加するには、--additional-suffix
オプションを指定します。
例えば拡張子.yuv
をつけたい場合は、--additional-suffix=.yuv
と指定します。
実例:非圧縮YUVファイルを分割する
解像度が320x240で非圧縮yuv420形式の動画ファイル(input.yuv)を30フレームずつに分割します。
そのとき、分割後のファイル名を開始番号が100で5桁の連番にします。
そしてファイル名に拡張子.yuv
を付けます。
以上を実現するコマンドは次の通りです。
split --numeric-suffixes=100 -a 5 -b $((320 * 240 * 3 / 2 * 30)) --additional-suffix=.yuv input.yuv ./
以下の通り結果を確認しました。
$ ls 00100.yuv 00101.yuv 00102.yuv 00103.yuv 00104.yuv 00105.yuv input.yuv
参考
split --help