Kindle用の画像zipを作ってくれるスクリプトが地味にヤバそうだったので直した。

2010年3月10日 Linux, スクリプト関連, 雑記

間違えてディレクトリの指定無とかで実行しちゃったときユーザルートのファイルが光の速さでお亡くなりになるのは正直アレ過ぎるのでディレクトリの指定が空だったり、解像度指定が空だったりしたときにエラーで終了するようにした。

追加したのは太字部分。
想定しているエラーの条件は以下の通り。

・ディレクトリの指定を忘れて解像度の指定のみ入れた場合 — この場合は当然exit。
・ディレクトリの指定、解像度の指定の両方を忘れた場合 — この場合は解像度指定の段階でexit。
・解像度の指定を忘れた場合 — この場合は解像度指定の段階でexit。
・存在しないディレクトリを指定した場合 — この場合はcdの実行失敗で$?に1が入っているはずなのでexit。

ホントは削除する前にお伺いを立てるようなのの方がやり方としてお行儀いい気もするけども、いちいち消すか消さないかっていうメッセージのところで処理が止められてるのも邪魔くさいのでそれはしない方向で。

使い方はそのまま。ディレクトリと対象機器(k2、kdx)を引数として付けて実行。

#!/bin/bash
case “$1” in
  k2 | kdx ) echo “err:ディレクトリが指定されていません。”
  exit 1
  ;;
  * ) cd $1 ;;
esac
case “$?” in
  1 ) echo “err:ディレクトリの指定が間違っています。”
  exit 1
  ;;
esac

#対象機器の解像度指定
##k2 — Kindle2
##kdx — Kindle DX
case “$2” in
  k2 ) rez=800 ;;
  kdx ) rez=1200 ;;
  * ) echo “err:対象機器が指定されていません。”
  exit 1
  ;;

esac
#拡張子を配列に
ext=( jpg JPG jpeg JPEG gif GIF png PNG )
for (( i = 0; i < 8; i++ ))
{
  #画像ファイルのみのリスト生成
  ls | grep .${ext[i]} >>zlist.lst
}
#リスト行数取得
p=`wc -l <zlist.lst`
for (( i = 0; i < $((p + 1)); i++ ))
{
  case “$i” in
    0 ) ;;
    * )
      #ファイルサイズ変更後、元ファイル削除
      val=`printf “%03d” $i`
      flname[i]=`sed -n “$i”p zlist.lst`
      convert -resize “$rez”x”$rez” “${flname[i]}” p”$val”.jpg
      rm “${flname[i]}”
    ;;
  esac
}
bn=`basename $1`
zip ../”$bn”.zip *.*
rm *.*
cd ..
rmdir “$bn”

例によって例のごとくインデントが全角です。

役に立ったならご褒美くらいくださってもよろしくってよ。
ホラこんな所にアマゾンのウィッシュリストが。

コメントは受け付けていません。