連番タイトルのファイル名を自動的にリネームするスクリプトが動かない

OKWave 2008年01月23日 16時00分

  • このエントリーをはてなブックマークに追加
シェルスクリプトがちゃんと動かない

よろしくおねがいします。

fileフォルダに
1.txt
2.txt
3.txt
というファイルがあり、ここから1.txtを別フォルダに移動します。
(ここまでは問題ありません)

その後fileフォルダには
2.txt
3.txt
というファイルが残るのですが、このファイル名を自動的に
1.txt
2.txt
と連番でリネームしたく


#!/bin/sh
declare -i i=1
for file in *.txt
do
mv $file $i.txt
i=i+1
done

をhoge.shとして準備しました。

Mac OS X(Darwin)では思い通りに実行されるのですが、Webサーバ(FreeBSD 6.1-RELEASE-p21)にアップし


%sh hoge.sh

とすると


declare: not found

となり、ファイルの方も
.txt
i+1.txt
の2ファイルになってしまいます。

あまり知識も無く勉強しながらなのですが、きちんと連番で書き換えられるようにするにはどうすればよろしいでしょうか?
根本的に間違ってる事などあるかと思いますがよろしくおねがいします。

良回答

それは/bin/shの機能を超えた Darwinのシェルの拡張機能を使っているからでしょう。
また、ファイルが10個以上あると


for file in *.txt

では


1.txt 10.txt 11.txt 2.txt 3.txt・・・

という順序で処理されてしまいます。

とりあえず


man sh

を全部読破すれば理解できると思いますよ。

  • このエントリーをはてなブックマークに追加
関連キーワード
OS

SpecialPR