編集部からのお知らせ
新着の記事まとめPDF「NTT」
おすすめ記事まとめ「MLOps」

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

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

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

ZDNet Japan 記事を毎朝メールでまとめ読み(登録無料)

特集

CIO

モバイル

セキュリティ

スペシャル

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNet Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]