ファイル名の数値を変換

複数のファイルがあり、それらファイルのファイル名の数値の部分だけを付け変える用途で、シェルスクリプトを使いたい。

file001 -> file003
file002 -> file004
...
file010 -> file012
...

のように変換したい。そのために下記のスクリプトを試してみた。現在の数値(変数NUM)に2を足して新しい数値(変数NN)を出力するだけのテスト。

#!/bin/sh

for NUM in `seq -w 5 15`
do
  let NN=${NUM}+2
  echo ${NUM}, ${NN}
done

このスクリプトの実行結果は、

$ sh change.sh 
05, 7
06, 8
07, 9
change.sh: line 5: let: NN=08: value too great for base (error token is "08")
08, 9
change.sh: line 5: let: NN=09: value too great for base (error token is "09")
09, 9
10, 12
11, 13
12, 14
13, 15
14, 16
15, 17

となる。どうも、変数NUMが08と09のときだけエラーになるようだ。エラーの内容から推測すると、0で始まる数値を8進数と解釈しており、08と09は、10進数の8と9として認識されないのだな。
今の場合、最初の0を取るわけにはいかないので、01から09までは別処理として、10以降をこのスクリプトで処理する。