http://www.linux.or.jp/JF/JFdocs/Bash-Prog-Intro-HOWTO-12.html
若干修正版
#!/bin/sh # renna: いくつかのルールに従って、複数のファイルをリネームする # スクリプト: Felix Hudson Jan 2000 # 最初にこのプログラムが取るいくつかの「モード」についてチェックする # 第一引数($1)の条件が一致するなら、プログラムの該当部分を実行して # 終了する # モード変数($1)と prefix ($2)を取り除く prefix=$2 ; shift ; shift # ファイルが指定されているか簡単にチェックする # 指定されていないときは、存在しないファイルをリネームすることは # できないので、なにもしない if [$1 = ]; then echo "no files given" exit 0 fi # プログラムの引数となるファイルを順にループ処理する # ファイルをひとつずつリネームする for file in $* do mv ${file} $prefix$file done # ここでプログラムを終了する exit 0 fi # suffix をリネームするかチェックする # ここでの残りの部分は上記とおなじ処理なので、そちらを見てほしい if [ $1 = s ]; then suffix=$2 ; shift ; shift if [$1 = ]; then echo "no files given" exit 0 fi for file in $* do mv ${file} $file$suffix done exit 0 fi # 名前の置き換えかどうかをチェックする if [ $1 = r ]; then shift # ユーザが処理の内容を指定しなかったとしてもファイルがダメージを # 受けないように、次のコードを含めた if [ $# -lt 3 ] ; then echo "usage: renna r [expression] [replacement] files... " exit 0 fi # 余計な情報を削除する OLD=$1 ; NEW=$2 ; shift ; shift # この for ループはプログラムに与えられたファイルを順に処理する # sed というプログラムを使って、ファイルをひとつずつリネームする # sed は標準入力を読み込んで、特定の表現を与えられた文字列に置換する # ここでは、標準入力からファイル名を指定して、必要な文字を置換させる for file in $* do new=`echo ${file} | sed s/${OLD}/${NEW}/g` mv ${file} $new done exit 0 fi # ここまで来たとすると、プログラムに引数がなかったということなので、 # 使い方を表示する echo "usage;" echo " renna p [prefix] files.." echo " renna s [suffix] files.." echo " renna r [expression] [replacement] files.." exit 0 # 終了