この名前変更方法で私が気に入らないのは、EXIFの日付とタイムスタンプで使用されるコロン(例: "2013:09:03 20:55:09_IMG_0108.JPG")で、これらのファイルを後で他の環境に転送するときに問題が発生する可能性があります(例:Windows)。
次のように、名前付けスキーマをsed
で実行して、コロンをダッシュに、スペースをアンダースコアに置き換えることができます。
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$i"
全体を小文字にする場合は、次のように使用できますrename
。
rename 's/(.*)/\L$1/' file.JPG
## or
rename 's/(.*)/\L$1/' *.*
またはsed
、次のようにを使用してスクリプト内で実行することもできます。
j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/')
...そして、$j
変数を行の最終$i
の代わりに使用しますmv
。sedは普遍的ですが、Linuxディストリビューションごとに名前変更コマンドが異なるため、このsedの方法は少し移植性があります(重要な場合)。
または、代わりに、スクリプトを次のように変更して、tr
代わりに使用してファイル名を小文字に変換することもできます。
for arg
do
tmp="$(echo "$arg" | tr '[A-Z]' '[a-z]')"
mv -i "$arg" "$(exiftool -CreateDate "$arg" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$tmp"
done
異なるファイルタイプに対してわずかに異なるコマンドを実行するには、このスクリプトでbash caseステートメントを使用できます。例えば:
#! /usr/bin/env bash
for filename in ./*
do
tmp="$(echo "$filename" | tr '[A-Z]' '[a-z]')"
case "$filename" in
*.MOV|*.mov)
mv -i "$filename" "$(exiftool -a -s -CreateDate-tur "$filename" | awk -F ': ' '{print $2}' | sed -e 's/\-[0-9][0-9]\:00//g' -e 's/\+[0-9][0-9]\:00//g' -e 's/:/-/g' -e 's/ /_/g')_$tmp"
;;
*.JPG|*.jpg)
mv -i "$filename" "$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_"$tmp""
;;
*)
echo 'Not a *.jpg or a *.mov!'
;;
esac
done
この例では、別の(-tur)EXIFデータを使用し、その時間差サフィックスを削除することで、CreateDateタイムスタンプがANY NUMBER時間後またはBEFORE JPGファイルであるMOVファイルの名前変更が調整され、-tur部分の変更が必要になる場合があります。システムで設定された場所に従って。