プロフィール

Author:スクリプトTIPS
シェルスクリプトやコマンド、C言語、PC操作の覚書です。


最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブログ内検索
RSSフィード
リンク
By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

ブロとも申請フォーム
QRコード
QRコード

ファイル名一括変更(スクリプト編):シェルスクリプト(csh) 

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コマンドの引数をくくってもシェルスクリプト上ではエラーとなった。

理由は不明なので、知っている人がいたら
理由を教えてもらえると助かります。

コメントの投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://scriptadversaia.blog25.fc2.com/tb.php/1-5613f042