2012年4月22日日曜日

名前を変えて撮影日時順に並べ替える

携帯やデジカメで撮った写真をパソコンに保存するときに撮影日時順ではなく、保存した順に名前がつけられてる場合がある。保存の仕方が悪いのだが、気づかずに大量の写真がバラバラに保存されていたことがある。こういう時に一括で撮影順に並べ替えるコマンドがあればいいのだが、私が探した限りでは、コマンド一発で変換というわけにはいかないようだったので、シェルスクリプトを書いて実行した。例えば1.JPG~10.JPGの名前を変更するスクリプトはこちら

======ここから=================
#!/bin/bash

 for i in 1 2 3 4 5 6 7 8 9 10
do
    jhead $i.JPG | grep Date/Time >name.txt
    sed -i -e "s%Date/Time    : %%g" name.txt
    sed -i -e "s/://g" name.txt
    sed -i -e "s/ /_/g" name.txt
    name=`cat name.txt`
    mv $i.JPG $name.JPG
done
rm name.txt
======ここまで=================

ちなみに,5行目の jhead というコマンドは apt-get かなんかでインストールしないといけない。
もっとスマートな書き方があるかもしれないが、一応説明をするとすれば、
シェルスクリプトの for文では i に代入する数字を直接書いてもいいので、3行目のようになった。
jhead コマンドは JPG ファイルの詳細情報を表示するコマンド。man ページで確認してもらいたい。$i.JPG 変更前の画像ファイルの名前。
sed コマンドでDate/Time とかのいらない文字列をどんどん消していく。-i は上書き保存のオプション。
name という変数に cat で name.txt の中身を代入して、mv で名前を付け替える。
最後にname.txt というファイルが残って、気になるので消す。

このスクリプトの実行に成功すると、変更前の名前は完全に消えてしまうのでご注意を。
ご使用は自己責任でお願いします。

1 件のコメント:

  1. とても魅力的な記事でした!!
    また遊びに来ます!!
    ありがとうございます。。

    返信削除