授業時間内に課題を提出してもらう。
ホームディレクトリの下のunixディレクトリに
kadai.shという名前でシェルスクリプトを作り、
画像ファイル名の前半部分と番号の種類を変換できるようにせよ。
% ls *.iff tmp.1.iff tmp.2.iff tmp.3.iff tmp.4.iff tmp.5.iff kadai.0006.iff kadai.0007.iff kadai.0009.iff kadai.0010.iff % csh kadai.sh -4 tmp test % ls *.iff test.0001.iff test.0002.iff test.0003.iff test.0004.iff test.0005.iff kadai.0006.iff kadai.0007.iff kadai.0009.iff kadai.0010.iff % csh kadai.sh -1 kadai tmp % ls *.iff test.0001.iff test.0002.iff test.0003.iff test.0004.iff test.0005.iff tmp.6.iff tmp.7.iff tmp.9.iff tmp.10.iff
4桁の番号を変換するのでwhileによって10000まで調べれば良い。
set i = 1
while($i < 10000)
if($i < 10) then
set n = 000$i
else if($i < 100) then
set n = 00$i
else if($i < 1000) then
set n = 0$i
else if($i < 10000) then
set n = $i
endif
if($argv[1] == -1 && -f $argv[2].$n.iff) then
mv $argv[2].$n.iff $argv[3].$i.iff
else if($argv[1] == -4 && -f $argv[2].$i.iff) then
mv $argv[2].$i.iff $argv[3].$n.iff
endif
@ i ++
end
printf コマンドを使用すると0の付いた数字を8進数として処理してしまうのでsedコマンドで最初の0を取っている。
foreach f ($argv[2].*.iff)
set i = $f:r:e
if($argv[1] == -1) then
set i = `echo $i | sed 's/^00*//'`
mv $f $argv[3].`printf "%d" $i`.iff
else if($argv[1] == -4) then
mv $f $argv[3].`printf "%04d" $i`.iff
endif
end
find を使って1行で実行したもの。
find . -name "$argv[2].*.iff" -exec csh -c 'set f = {} ; set i = `echo $f:r:e | sed "s/^00*//"` ; set d = `echo '$argv[1]' | sed "s/-//"` ; mv $f '$argv[3]'.`printf "%0"$d"d" $i`.iff' \;