大量のデジカメ写真があるのですが、あまりに量が多すぎて見るのもなかなか大変です。なんせ、開くのに時間がかかってしまいますので。
そこで、画像を一括縮小してやろうということで、調べてみました。
やりたいのは、ディレクトリを切ってある場所に、s_XXXXXX.jpg というファイル名で保存してあるものとします。これを縮小し、同じディレクトリに t_XXXXXX.jpg というファイル名で縮小画像を生成します。
結論から書くと、こんなワンライナーになりました。
$ for f in */s_*.jpg ; do cp $f ${f//s_/t_} ; mogrify -resize 640x640 -quality 60 ${f//s_/t_} ; done
for文でファイル名一覧を取得し、ループ内で一旦 t_XXXXXX のファイル名としてコピー(元のファイルを残さないなら mv でよい)します。その後、mogrify コマンドで 640×640 に収まるようにサイズ変換し、JPEG画像品質を60に指定します。
ファイル名の置換はシェル変数の置換 ${f//s_/t_} で行っています。