デジカメ写真を撮影日時のファイル名にリネームする作業をシェルスクリプトでやる。

2018年2月18日

この記事は最初の投稿日から10年経過しています。内容が古い可能性があります。

Bin vim 103×33

我が家ではデジカメ写真は撮影日時のファイル名にリネームしています。

リネーム作業はMacではこのアプリ。

たくさん撮った写真のファイルを撮影日時のファイル名に一気にリネームできるソフト- Shupapan – | よねとしめも

Shupapan は大変高機能なリネームソフトなのですが、私は撮影日時(or 作成日時)へのリネームの1点使い。

それだけであれば、GUI でなく CUI の方がさっと実行できてよいのではということで作ってみました。

標準外で必要なアプリが1つ。ファイルの Exif 情報を読取るコマンド。これを使います。

ExifTool by Phil Harvey

Mac 用のインストーラもあるので簡単にインストールできます。

このコマンドも使って以下を行います。

  1. exiftool でExifの撮影日時を取得する。
  2. Exifの撮影日時がない場合はファイルの作成日時を取得する。
  3. 作成日時.JPG のファイルがすでに存在している場合は、作成日時_連番.JPG というファイル名を作る。(連番は1〜9 まで)
  4. 元のファイル名を作成日時のファイル名にリネームする。

というシェルスクリプトがこれ。

(※ファイルの移動を伴うので使う場合はご自身で検証の上ご利用ください。)

#!/bin/sh
cd 写真のディレクトリ
mkdir PNG > /dev/null 2>&1
mv *.[pP][nN][gG] PNG > /dev/null 2>&1
TARGET_BODY=*
TARGET_LIST=`ls -1F | egrep -v '[/]|Thumbs.db'`;
for TARGET in $TARGET_LIST
do
  EXT=`echo $TARGET | awk -F. '{print $2}'`
  SRCNAME=$TARGET
  DST=`exiftool -DateTimeOriginal $TARGET | cut -c35- | sed 's/://g' | sed 's/ /_/g'`
  if [ -z $DST ]; then
    DST=`stat -f "%SB" -t "%Y%m%d_%H%M%S" $TARGET`
  fi
  DSTNAME=$DST.$EXT
  for i in `seq 1 9`
  do
    if [ -f $DSTNAME ]; then
      DSTNAME=${DST}_$i.$EXT
    else
      break
    fi
  done
  echo $SRCNAME to $DSTNAME
  mv -n $SRCNAME $DSTNAME
done

最初に PNG ファイルを移動しているのはiPhoneのスクリーンショットを除外するため。

また、対象ファイル(TARGET_LIST)を作る時に、Thumbs.db 等、写真ではない不要なファイルを除外しています。(共有しているので Windows が余計なファイルを作るのです。)

Mac

Posted by toshyon