正しいEXIF情報を含む複数の写真があり、写真名がランダムに指定されているとします(問題が発生したため)。jhead
次の出力を提供する小さなプログラムがあります。
$ jhead IMG_9563.JPG
File name : IMG_9563.JPG
File size : 638908 bytes
File date : 2011:02:03 20:25:09
Camera make : Canon
Camera model : Canon PowerShot SX210 IS
Date/Time : 2011:02:03 20:20:24
Resolution : 1500 x 2000
Flash used : Yes (manual)
Focal length : 5.0mm (35mm equivalent: 29mm)
CCD width : 6.17mm
Exposure time: 0.0080 s (1/125)
Aperture : f/3.1
Focus dist. : 0.29m
ISO equiv. : 125
Exposure bias: -1.67
Whitebalance : Manual
Light Source : Daylight
Metering Mode: pattern
Exposure Mode: Manual
フォルダ内のすべての写真の名前を次の形式に変更する必要があります。
001.JPG
002.JPG
003.JPG
...
マイナー番号は前の画像、最大番号は最新の画像です。
私は書くことができず、助けを求めた。
私はbashスクリプトで十分だろうと思いますが、より快適な場合はPythonスクリプトを書くこともできます。
私の考えには次のようになります。
$ mv IMG_9563.JPG `jhead IMG_9563.JPG | grep date`
しかし、同時にすべてのファイルに対してこれを行う方法がわかりません。
答え1
見つけたばかりここjheadはあなたのためにすべてを行うことができます! :)
jhead -autorot -nf%Y-%m-%d_%H-%M-%S *.jpg
答え2
forループ(シェル/シェルスクリプトで)を使用してすべてのファイルにアクセスできます。
for i in *.JPG; do
j=`jhead "$i" | grep date | sed 's/^File date[^:]\+: \(.\+\)$/\1/'`.jpg
echo mv -i "$i" "$j"
done
これは非常に基本的な概要です。echo
すべてが正常であることを確認したら、削除してください。
答え3
exiv2
非常に単純な構文を可能にする代替作業方法です。
exiv2は、Exif、IPTC、XMPメタデータ、および画像コメントを読み書きするためのプログラムであり、複数のベンダーのメーカーノートタグを読み取ることができます。このプログラムには、Exif タグ、XMP 属性、IPTC データセット間を変換するオプションがあります。
したがって、現在のフォルダのすべてのjpeg名が変更されます。
for i in *.JPG; do exiv2 -v -r '%Y%m%d.%H%M%S.:basename:' rename "$i"; done
地理情報を追加するには、次のものを使用できますexivtool
。
exiftool '-filename<${gpslatitude;} ${gpslongitude} ${datetimeoriginal}' -d "%Y-%m-%d %H.%M.%S%%-c.%%e" *.JPG
答え4
maxschlepzigが投稿したコードが気に入っていますが、それでも出力に問題があります。
問題は、生成されたファイル名のスペース(日付文字列と時刻文字列の間)です。 GUIを使用している人にとっては些細なことですが、コマンドラインでファイルを処理する方がはるかに難しくなります。
ここで、「sed」コマンドはデフォルトで、4つの個別の「sed」操作に変更され、以前の完全なパラメーターをサポートしています。私自身に合わせて、以下のファイルも通常の644権限に変更します。
for i in *.JPG ; do
chmod 644 $i
j=`jhead "$i" | grep ^Date/Time | sed -e 's/^Date\/Time[ ]\+: //;s/:/-/g;s/ /_/g':/-/g;s/ /_/g'`.jpg
echo mv -i "$i" "$j"
# mv -i "$i" "$j"
done