ZDNet Japan Brand Site:
ZDNet Japan
builder
リファレンス » BSD系OS

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

連番タイトルのファイル名を自動的にリネームするスクリプトが動かない。あまり知識も無く勉強しながらなのですが、きちんと連番で書き換えられるようにするにはどうすればよろしいでしょうか?

OKWave  2008年1月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

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

記事提供:OKWave

「BSD系OS」 のバックナンバー

http://japan.zdnet.com/reference/bsd/story/0,3800077748,20365529,00.htm
連番タイトルのファイル名を自動的にリネームするスクリプトが動かない

ZDNet Japan Essential Topic

ZDNet Japan ニューズレター

企業情報システムの選択、導入、運用管理に役立つ情報を毎朝メール配信します。

ニューズレターの登録・登録情報変更 »