シェルスクリプトの応用

画像ファイル名の変換

ここではいままで学習したシェルスクリプトの応用例としてMayaでレンダリングされた画像ファイルの名前を色々なパターンで変換するスクリプトを作ってみよう。
よくある例として、アニメーションの画像ファイルの番号の桁数を変更したいという場合を考えてみよう。

注意

シェルのスクリプトでは目的を達成するための方法は何種類も考えられる。
ここで紹介するのはそのうちの、いくつかに過ぎない。
どの方法がベストかはその場の状況によって変ってくる。
実際に自分でスクリプトを作って実行する時には、以下のサンプルをもとにして様々な状況に対処できるようにしよう。

例えば、test.iff.1 ~ test.iff.10 を test.iff.0001 ~ test.iff.0010に変更するスクリプトはどのように作れば良いだろうか。
1から10までの番号は変数を1から10まで変えてゆけば良い。
問題は0001から0010までの数字をどのように表せば良いかということだ。
if文などを使用して1桁の場合、10桁の場合と分けてファイル名を変更しても良いが、それだとプログラムが少しだけ複雑になる。

スクリプト例1

set i = 1
while($i <= 10)
	if($i < 10) then
		set n = 000$i
	else if($i < 100) then
		set n = 00$i
	endif
	mv test.iff.$i test.iff.$n
	@ i ++
end

上のスクリプトの問題点は数字が100以上ある場合にelse if()を増やさなくてはならないのでさらにスクリプトが複雑になってしまうということである。
このような場合は、printfというコマンドを使用すると少しだけスクリプトが簡単になって汎用性も増す。
(printfはC言語のprintfと同じような使い方のできるコマンドである)

# printf "%d\n" 78
78
# printf "%04d\n" 78
0078

このprintfを使用して上のスクリプトと同じことを行うスクリプトを作ると以下のようになるだろう。
スクリプト例2 (rename1.sh)

set i = 1
while($i <= 10)
	set n = `printf "%04d" $i`
	mv test.iff.$i test.iff.$n
	@ i ++
end
# ls
rename1.sh test.iff.1 test.iff.2 test.iff.3 test.iff.4 test.iff.5
test.iff.6 test.iff.7 test.iff.8 test.iff.9 test.iff.10
# csh rename1.sh
# ls
rename1.sh test.iff.0001 test.iff.0002 test.iff.0003 test.iff.0004 test.iff.0005
test.iff.0006 test.iff.0007 test.iff.0008 test.iff.0009 test.iff.0010

練習課題

まとめ

参考


Prev | Next
Home | Contents
abe@injapan.net