電子書籍の厳選無料作品が豊富!

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

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ファイルになってしまいます。

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

A 回答 (2件)

それは/bin/shの機能を超えた Darwinのシェルの拡張機能を使っているからでしょう。


また、ファイルが10個以上あると
for file in *.txt
では
1.txt 10.txt 11.txt 2.txt 3.txt・・・
という順序で処理されてしまいます。

とりあえず
man sh
を全部読破すれば理解できると思いますよ。

この回答への補足

追記
やはり自分の知識ではまだまだ追いつかなかったので、個別に mvという方法にしました。
ファイル数もあまり無いですし、順序の問題もクリアされて無事検証も出来ました。

とりあえず動かす分には完璧なので、今後勉強していきながら、もっと良い書き方を覚えていこうと思います。

本日で閉め切らせていただきます。
ありがとうございました。

補足日時:2007/12/22 16:25
    • good
    • 0
この回答へのお礼

なるほど。Darwinでの動作が特別だったのですね。

処理順についても大変参考になりました。

シェルスクリプトを利用して今まで面倒だった事が色々出来そうなのですが、なかなか大変です。
man shも参照しましたが英語に疎いので、、、

今日は朝からトライしていたので、明日本屋に直行しようと思います。

ありがとうございました。

(締め切りはもう少し先にさせてください)

お礼日時:2007/12/22 01:15

シェル上ではそのまま演算式を書いても文字列として扱われるみたいだよ


http://www.google.co.jp/search?q=sh%20%E6%95%B0% …
・・・expr ・・・かな?
    • good
    • 0
この回答へのお礼

ありがとうございました。

他にも間違いがありそうなので、引き続き調べていきたいと思います。

お礼日時:2007/12/21 22:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!