「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
コメント