私はよく写真やビデオをインポートします (主にJPGおよびMOV拡張子が付いています)デジタルカメラおよびタブレットから 私のPCに送信します。理想的には、撮影された日時に従って並べ替えてもらいたいと思います。 EXIFデータにすでに存在します。したがって、すべての名前を変更したいと思います。 できれば、単純なノーチラススクリプトを使用してください できれば、各ファイル名の前に日付と時刻のスタンプを挿入してください。
私はこれまで、次のノーチラススクリプトをまとめることしかできませんでしたが、これは完璧にはほど遠いと思います。
for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i""
done
この名前変更方法で私が気に入らないのは、EXIFの日付と時刻のスタンプで使用されるコロンです。 (例:「2013:09:0320:55:09_IMG_0108.JPG」)これらのファイルを後で他の環境(例:Windows)に転送するときに問題が発生する可能性があります。
このコマンド( exiv2 を使用) exiftoolの代わりに )日付と時刻のスタンプを簡単に操作できますが、その欠点はビデオ(MOVなど)ファイルでは機能しないことです。 :
exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"
だから私は誰かがより良い解決策を考え出すことができることを望んでいます。 また、元のファイル名と拡張子を小文字に変換することさえできれば、それは魔法のようです!
承認された回答:
この名前変更方法で私が気に入らないのは、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
ファイルタイプごとにわずかに異なるコマンドを実行するために、このスクリプトでbashcaseステートメントを使用できます。例:
#! /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
この例では、作成日タイムスタンプがJPGファイルの前後の任意の時間数を持つMOVファイルの名前変更は、別の(-tur)EXIFデータを使用し、その時差サフィックスを削除することで調整されます。変更が必要になる場合があります -tur システムに設定された場所に応じて分割します。