cshを使った方法です。
こちらと似ています。
・やりたいことファイル名を同じフォーマットで辞書式の順で変更したい。
今回は、IMG_n.jpg としたい。
具体的には、IMG_0001.jpg, IMG_0002.jpgといった連番にしたい。
※nは数字
・課題スペースが入ったファイル名が対象ファイルとなる。
具体的には、IMG_0001 (35).jpgなどといった名前のファイルがネックとなる。
・シェルスクリプト(csh)#!/usr/bin/csh -f
set IMG = “IMG_”
set EXTENTION = “.jpg”
@ number = 0
# remove the space for foreach
set INTENDED_FILES = `ls $argv[1] | sed ’s/\ (/(/’`
foreach i ($INTENDED_FILES)
set NEW_FILE = ${IMG}${number}${EXTENTION}
echo $i | sed ’s/(/\\\ \\\\(/’ | sed ’s/)/\\\\)/’ > tmp
set file_name = `cat tmp`
echo “mv $argv[1]/$file_name $argv[1]/$NEW_FILE”
#mv $argv[1]/$file_name $argv[1]/$NEW_FILE #-> can’t execute
@ number++
end
・手順1. 引数に対象となるファイルのある
ディレクトリを指定してシェルスクリプトを実行。
このとき実行結果をリダイレクトしておく。
ex)./rename.sh abc > rename_redirect_script
2. リダイレクトして作ったファイルに実行権限をつけて実行する。
ex)chmod u+x rename_redirect_script
./rename_redirect_script
・確認環境Windows XP
cygwin
・備考スペースをエスケープしても
mvコマンドが実行されなかった。
echoで表示されるコマンドを
プロンプト上から実行すればmvは問題なく実行できるが、
シェルスクリプト上では、スペースをエスケープしても
無効となってしまった。
(なので、mvの行はコメントアウトしている)
そこで、仕方がないので、実行結果をリダイレクトして
それをそのままコマンドとして実行するようにした。
なお、シングルクウォートやダブルクウォートで
mvコマンドの引数をくくってもシェルスクリプト上ではエラーとなった。
理由は不明なので、知っている人がいたら
理由を教えてもらえると助かります。