コレを使い、Bashで連番ファイル名を綺麗にしたいと思った。
まずループ
BASHで10回ループ
for i in {0..100};\ do \ echo $i;\ done;
指定回数分ループするときは{}(カーリーブレース)で囲むのがミソ。他にもやり方はあるが,コレが覚えやすい。特にRuby使う人に優しい。
作りたいファイル名は0埋め三桁 001-100
accesslog.1.log
..
accesslog.2.log
accesslog.10.log
..
accesslog.100.log
番号順に並ばない。Vistaなら整列するのだけれど、XPはダメ、
試しに、bashコマンドでsprintfをする。できない
他の言語なら簡単にできるんだ
phpなら
<?php echo $name = sprintf("some_file%03d.txt", 99);#some_file099.txt
perlなら
$name = sprintf("some_file%03d.txt", 99); print $name
でも、Bashだとコマンドがない。
takuya$ sprintf
bash: sprintf: command not found
どうするか。
printfを展開するしてファイル名にして,からコマンドに渡す.
for i in {0..10};\ do name=$(printf accesslog.%03d.log $i);\ echo $name;\ done; accesslog.000.log accesslog.001.log accesslog.002.log accesslog.003.log accesslog.004.log accesslog.005.log accesslog.006.log accesslog.007.log accesslog.008.log accesslog.009.log accesslog.010.log
ポイント
- $(printf( '%03d' $i )) / sprintfの代わり
- for i in {0..10}; / seq の代わり
2016/06/03
ちょっと追記