Fotos nach Datum umbenennen mit jhead

Digitalkameras speichern Bilder oft unter Dateinamen wie DSC00523.jpg. Mit diesen nicht sprechenden Namen kann ich nicht viel anfangen. Das Datum und die Uhrzeit des Fotos ist für den Dateinamen viel besser geeignet.

EXIF-Daten auslesen
Die Digitalkamera speichert das Datum und die Uhrzeit in den so genannten EXIF-Tags. Mit jhead kann man diese Tags auslesen und bearbeiten.

Mit jhead dateiname.jpg kann man sich die EXIF-Tags anzeigen lassen:

emanuel@discordia:~
$ jhead DSC00523.JPG
File name    : DSC00523.JPG
File size    : 2277972 bytes
File date    : 2011:02:06 13:45:34
Camera make  : Canon
Camera model : Canon DIGITAL IXUS 80 IS
Date/Time    : 2010:12:27 12:02:37
Resolution   : 2592 x 1944
Flash used   : No
Focal length : 14.3mm  (35mm equivalent: 90mm)
CCD width    : 5.72mm
Exposure time: 0.020 s  (1/50)
Aperture     : f/4.5
Focus dist.  : 6.57m
ISO equiv.   : 800
Whitebalance : Auto
Metering Mode: pattern

In der Zeile Date/Time sieht man, dass das Foto am 27.12.2010 um 12:02:37h erstellt wurde.

Datei umbenennen
Mit jhead kann man nun das Foto nach dem Muster YYYY-mm-dd-HH-MM-SS umbenennen. Dies geschieht mit der Option -nf von jhead.

emanuel@discordia:~
$ jhead -nf%Y-%m-%d_%H-%M-%S DSC00523.JPG
DSC00523.JPG --> 2010-12-27_12-02-37.jpg

Kann das Erstellungsdatum und die Erstelungsuhrzeit nicht aus den EXIF-Daten herausgelesen werden, wird der Zeitstempel der Datei verwendet.

In der Manpage von jhead sieht man, wie sich der Format-String zusammensetzen lässt:

%H Hour in 24-hour format (00 - 23)
%j Day of year as decimal number (001 - 366)
%m Month as decimal number (01 - 12)
%M Minute as decimal number (00 - 59)
%S Second as decimal number (00 - 59)
%w Weekday as decimal number (0 - 6; Sunday is 0)
%y Year without century, as decimal number (00 - 99)
%Y Year with century, as decimal number

Alle Fotos in einem Ordner umbenennen
Mit dem regulären Ausdruck *.[jJ][pP][gG] benennt jhead alle Fotos in einem Ordner um:

emanuel@discordia:~
$ jhead -nf%Y-%m-%d_%H-%M-%S *.[jJ][pP][gG]

Alle Fotos umbenennen
Mit find kann man die gesamte Bildersammlung auf einmal umbenenen:

emanuel@discordia:~
$ find Daten/Bilder -iname *.jpg -exec jhead -nf%Y-%m-%d_%H-%M-%S {} \;

Im Ordner Daten/Bilder sind alle Fotos gespeichert, welche umbenannt werden.

Automatisieren
Damit man nicht jedes mal den Befehl von jhead eingeben muss, kann man sich ein Skript schreiben:

#!/bin/bash
########################################################################
#
# imagerename
# Fotos nach Datum umbenennen
#
# 2009-01-01; Emanuel Duss; Erste Version
#
########################################################################

########################################################################
# Main
jhead -nf%Y-%m-%d_%H-%M-%S *.[jJ][pP][gG]

# EOF

Ist dieses Skript ausführbar unter dem Dateinamen imagerename gespeichert und durch die Variable $PATH auffindbar, kann man in jedem Verzeichnis durch den Aufruf von imagerename alle Bilder im aktuellen Verzeichnis umbenennen.

Man kann sich aber auch einen Alias erstellen, welcher den Befehl ausführt. Folgende Zeile schreibt man sich in die Datei ~/.bashrc:

alias imagerename='jhead -nf%Y-%m-%d_%H-%M-%S *.[jJ][pP][gG]'

Auch jetzt kann man im jedem Verzeichnis durch imagerename alle Fotos umbenennen.

Leave a Comment