画像を縮小してHTMLでサムネイル化するシェルスクリプト
MacPortsでMac miniにImageMagickをインストールしたので、撮りためたデジカメの写真を一気にサムネイル化してしまおうと考えました。
僕の環境では、画像ファイルは全部「写真」フォルダの中のサブフォルダ(イベントごとに「2009-01 新年」などの名前がついている)直下に入れています。次の目標を立てました。
- 各サブフォルダ下にthumbsというフォルダを作る
- thumbsに適当なサイズに縮小した画像ファイルを保存する
- 各サブフォルダ下にindex.htmlというファイルを作る
- index.htmlを開くとサムネイルが見え、クリックすると原寸の画像が開く
#!/bin/bash find . -maxdepth 1 -mindepth 1 -type d | while read d do # ディレクトリに入る echo $d cd "$d" mkdir thumbs echo "<html><head><title>$d</title></head><body>" > index.html # ファイルごとの処理 for f in *.JPG do if [ -e thumbs/$f ]; then echo "$f already exists. (skipped)" else /opt/local/bin/convert -geometry 200x150! $f thumbs/$f echo $f fi echo "<a href=$f><img src=thumbs/$f width=200 height=150 /></a>" >> index.html done echo "</body></html>" >> index.html cd "../" done
サブフォルダの一覧を取得してフォルダごとに処理を走らせる冒頭の部分が一番難しかったです。半角スペースを含んだフォルダ名は、単純に ls コマンドで一覧を取得しただけでは二フォルダ扱いされてしまう等。けっきょくfindでmindepthとmaxdepthを共に1として直下のフォルダ一覧のみ取得するようにして対応しました。
あとは、サブフォルダごとにthumbsフォルダとindex.htmlを作成し、見つかったファイルごとに縮小をかけて、タグをHTMLに追記する処理が続いておしまいです。ImageMagickのconvertコマンドのパスは環境に応じて書き換えてください。他は一般的なUNIXコマンドしか使っていないので普通に動くと思います。
このスクリプトを親フォルダに入れて走らせれば、自動的にサムネイルができあがります。