連番ファイルを作成する方法

「file_1.txt」 「file_2.txt」「file_3.txt」... 「file_10.txt」といったような連番のファイルを簡単に作成する方法です。

作成方法として3種類の方法について説明していきます。

  • bashのブレーズ展開を使用
  • forを使用したワンライナー
  • whileを使用したワンライナー

ブレーズ展開を使用

bashにはブレーズ展開というとても便利な機能があります。

下記のように最初の数字と最後の数字を指定するだけで、連番を生成してくれます。

{最初の数字..最後の数字}

ブレーズ展開の例としてechoコマンドで「1」から「5」までの連番を表示させてみます。

$ echo {1..5}
1 2 3 4 5

このブレーズ展開機能を使うことで簡単に連番のファイルを作成することが出来ます。

実際に「file_1.txt」「file_2.txt」「file_3.txt」「file_4.txt」「file_5.txt」というファイルをブレーズ展開の機能を使って作成します。

$ touch file_{1..5}.txt

こんな感じで簡単に連番のファイルを作成することが出来ます。

$ ls
file_1.txt  file_2.txt  file_3.txt  file_4.txt  file_5.txt

1以外から始めたい場合

1以外の数字からスタートさせたい場合も簡単に指定することが出来ます。

例えば「file_5.txt」から「file_10.txt」という連番のファイルを作成したい場合は{5..10}と指定します。

$ touch file_{5..10}.txt
$ ls
file_10.txt  file_5.txt  file_6.txt  file_7.txt  file_8.txt  file_9.txt

数字の桁合わせ(0埋め)したい場合

「file_01.txt」「file_02.txt」「file_03.txt」...「file_10.txt」といったように、数字の桁を0埋めで合わせたい場合もあると思いますが、bashのバージョン4からは{01..10}といったような指定をすることで、数字の桁数を合わせることもできます。

$ touch file_{01..10}.txt

このように簡単に数字の桁を合わせることが出来ます。

$ ls
file_01.txt  file_03.txt  file_05.txt  file_07.txt  file_09.txt
file_02.txt  file_04.txt  file_06.txt  file_08.txt  file_10.txt

3桁の数字にしたい場合は{001..10}といったように指定します。

$ touch file_{001..10}.txt
$ ls
file_001.txt  file_003.txt  file_005.txt  file_007.txt  file_009.txt
file_002.txt  file_004.txt  file_006.txt  file_008.txt  file_010.txt

文字の指定も可能

ブレーズ展開は数字以外にも文字を指定することもできます。

{a..z} 小文字の場合
{A..Z} 大文字の場合

実際に文字を使ってファイルを作成してみます。

$ touch file_{a..z}.txt

「a」から「z」の連続した文字が指定されてファイルが作成されました。

$ ls
file_a.txt  file_f.txt  file_k.txt  file_p.txt  file_u.txt  file_z.txt
file_b.txt  file_g.txt  file_l.txt  file_q.txt  file_v.txt
file_c.txt  file_h.txt  file_m.txt  file_r.txt  file_w.txt
file_d.txt  file_i.txt  file_n.txt  file_s.txt  file_x.txt
file_e.txt  file_j.txt  file_o.txt  file_t.txt  file_y.txt

for文を使用

シェルスクリプトのfor文を使用して連番のファイルを作成する例です。

ブレーズ展開を使用する場合に比べるとちょっと手間がかかると思いますが、覚えておいて損はないと思います。

for文を使って連番のファイルを作成する方法は色々ありますが、とりあえず思いつくものを紹介します。

下記はすべて繰り返し条件の部分が違うだけで、「file_1.txt」から「file_5.txt」を作成することが出来ます。

$ for ((i=1; i<6; i++));  do touch file_$i.txt ;done

$ for i in {1..5}; do touch file_$i.txt; done

$ for i in `seq 5`; do touch file_$i.txt; done

上から順に繰り返しの条件を下記の方法で指定しています。

  • 算術式
  • ブレーズ展開
  • seqコマンド

for文についてはこちらのページで詳しく説明していますので、参考にしてみてください。

他にも色々と方法はあると思いますが、お好きな方法を使用してください。

1以外から始めたい場合

繰り返し条件ごとに1以外から始まる連番ファイルを作成する方法を説明します。

算術式を使用

繰り返し条件に算術式を使用する場合は、最初の変数「i」に繰り返しを始めたい数字を設定することで、任意の数字から指定することが出来ます。

「file_5.txt」から「file_10.txt」という連番のファイルを作成したい場合は下記のように指定します。

$ for ((i=5; i<11; i++));  do touch file_$i.txt ;done
$ ls
file_10.txt  file_5.txt  file_6.txt  file_7.txt  file_8.txt  file_9.txt

ブレーズ展開を使用

これはブレーズ展開でファイルを作成する項目でも説明しましたが{最初の数字..最後の数字}と指定するだけです。(ブレーズ展開が使用できるならわざわざfor文使用する必要はないと思いますが…)

「file_5.txt」から「file_10.txt」という連番のファイルを作成したい場合は下記のように指定します。

$ for i in {5..10}; do touch file_$i.txt; done
$ ls
file_10.txt  file_5.txt  file_6.txt  file_7.txt  file_8.txt  file_9.txt

seqコマンドを使用

「seq」コマンドを使用する場合は、始まりの数字と最後の数字を下記のように指定することで途中からの連番ファイルを作成することが出来ます。

seq 始まりの数字 最後の数字

「file_5.txt」から「file_10.txt」という連番のファイルを作成したい場合は下記のように指定します。

$ for i in `seq 5 10`; do touch file_$i.txt; done
$ ls
file_10.txt  file_5.txt  file_6.txt  file_7.txt  file_8.txt  file_9.txt

数字の桁合わせ(0埋め)したい場合

for文を使用して数字の桁合わせを行いたい場合は、「printf」を使って表示したい数字の桁数を設定することが出来ます。

printf %0桁数d

例えば2桁で表示したい場合は、「printf %02d」といったように指定します。

$ for ((i=1; i<6; i++));  do i=`printf %02d $i` ;touch file_$i.txt ;done

これで数字の部分が2桁で作成されます。

$ ls
file_01.txt  file_02.txt  file_03.txt  file_04.txt  file_05.txt

seqコマンドを使う場合

繰り返し処理に「seq」コマンドを使う場合は「-w」や「-f」オプションを使用することで、数字の桁を指定することが出来ます。

「-w」オプションを使用

繰り返し処理で「seq」コマンドを使用する場合は、「-w」オプションを指定することで桁合わせ(0埋め)することが出来ます。

1~9までの1桁の場合でも頭に0を付けたい場合は「0」付けることで「01」「02」といったように0埋めすることが出来ます。

$ for i in `seq -w 05`; do touch file_$i.txt; done
$ ls
file_01.txt  file_02.txt  file_03.txt  file_04.txt  file_05.txt

3桁にしたい場合は「005」といったように指定を行います。

$ for i in `seq -w 005`; do touch file_$i.txt; done
$ ls
file_001.txt  file_002.txt  file_003.txt  file_004.txt  file_005.txt
「-f」オプションを使用

「-f」を使用することでも表示させる桁数を指定することが出来ます。

数字の桁数を指定する場合は「%g」を使います。

seq -f "%0桁数g" 繰り返す数

例えば「001」から「005」といった3桁の数字にする場合は「seq -f "%03g" 5」と指定します。

$ for i in `seq -f "%03g" 5`; do touch file_$i.txt; done
$ ls
file_001.txt  file_002.txt  file_003.txt  file_004.txt  file_005.txt

whileを使用

「while」文を使用した方法についても説明しておきます。

まず、変数「i」に最初の数字を格納してから、繰り返し条件の部分で繰り返しを行う数字を指定しています。

下記は「file_1.txt」から「file_5.txt」というファイルを作成する例となります。

$ i=1; while [ $i -le 5 ]; do touch file_$i.txt ; i=$(( i + 1)); done
$ ls
file_1.txt  file_2.txt  file_3.txt  file_4.txt  file_5.txt

1以外から始めたい

1以外の数字から始めたい場合は、変数「i」に始まりとしたい数字を設定して、条件式の部分で繰り返し終了させたい数字を指定してください。

「file_5.txt」から「file_10.txt」という連番のファイルを作成したい場合は、下記のように変数「i」に5を設定し条件式の部分で10を指定します。

$ i=5; while [ $i -le 10 ]; do touch file_$i.txt ; i=$(( i + 1)); done
$ ls
file_10.txt  file_5.txt  file_6.txt  file_7.txt  file_8.txt  file_9.txt

数字の桁合わせ(0埋め)したい場合

数字の桁合わせをしたい場合は、for文と同様に「printf」を使用することで桁数を指定することが出来ます。

2桁で指定する場合は下記のようになります。

$ i=1; while [ $i -le 5 ]; do i=`printf %02d $i`; touch file_$i.txt ; i=$(( i + 1)); done
$ ls
file_01.txt  file_02.txt  file_03.txt  file_04.txt  file_05.txt

コメント

タイトルとURLをコピーしました