EXIF-daten auslesen / Bilder trennen

rakso

Well-Known Member
Hallo!

ich habe in einem Verzeichnis viele Bilder, aus mindestens zwei unterschiedlichen Kameras. In den EXIF-Daten der JPG-Dateien ist ja die Kamera-Information enthalten.

Wie kann ich nun per script eine Liste mit Dateinamen der jeweiligen Kameras erstellen?

also z.b. so:


Kamera 1:
file1.jpg
file4.jpg
file6.jpg


Kamera 2:
file2.jpg
file3.jpg
file4.jpg


das progrämmchen jead kann das ausgeben:


$ jhead file1.jpg
File name : file1.jpg
File size : 1582093 bytes
File date : 2005:08:15 19:26:32
Camera make : NIKON CORPORATION
Camera model : NIKON D70
Date/Time : 2005:08:11 20:52:10
Resolution : 2916 x 1645
Flash used : No
Focal length : 28.0mm
Exposure time: 0.025 s (1/40)
Aperture : f/3.5
Exposure bias: 0.33
Metering Mode: matrix
Exposure : aperture priority (semi-auto)
Comment : (C) by me



So, und wie kann man dies nun parsen? Habe leider kaum Ahnung von Shell-Scripting :(


Die Dateinamen bekomme ich mit

ls -1 file_[0-9][0-9].jpg

Alle jhead-Ausgaben mit

for i in ls -1 file_[0-9][0-9].jpg; do jhead $i; done


Wie bekomme ich nun alle Dateinamen von einer Kamera, bspw. "NIKON D70"?

Mit grep -C 4 "NIKON D70" hats noch zu viele andere Zeilen.... willl nur File name und Camera model haben.
 
Zuletzt bearbeitet:
Hallo rakso,

schau Dir mal in den man-pages oder in der Sekundärliteratur "sed" und/oder "awk" an.
diese beiden Funktionen dürften für Deine Zwecke ausreichend sein.

Viele Grüße

Jürgen
 
rakso schrieb:
...ich habe in einem Verzeichnis viele Bilder, aus mindestens zwei unterschiedlichen Kameras. In den EXIF-Daten der JPG-Dateien ist ja die Kamera-Information enthalten.

Wie kann ich nun per script eine Liste mit Dateinamen der jeweiligen Kameras erstellen?
...
das progrämmchen jead kann das ausgeben:


Code:
$ jhead file1.jpg
File name    : file1.jpg
File size    : 1582093 bytes
File date    : 2005:08:15 19:26:32
Camera make  : NIKON CORPORATION
Camera model : NIKON D70
Date/Time    : 2005:08:11 20:52:10
...
So, und wie kann man dies nun parsen? Habe leider kaum Ahnung von Shell-Scripting :(

Die Dateinamen bekomme ich mit
Code:
ls -1 file_[0-9][0-9].jpg
Alle jhead-Ausgaben mit
Code:
for i in ls -1 file_[0-9][0-9].jpg; do jhead $i; done
Wie bekomme ich nun alle Dateinamen von einer Kamera, bspw. "NIKON D70"?
Na Du bist doch schon fast fertig:
Code:
for F in file_[0-9][0-9].jpg ; do
  echo -n "$F: "
  jhead $F | grep "NIKON D70"
  echo $?
done
in der Variablen $? steht 0 oder 1, je nachdem ob in der gerade untersuchten Datei der Suchstring gefunden wurde oder nicht.
 
seit den ganzen Jahren, in denen ich mich mit BSD usw beschäftige, habe ich mich vor einem Einstieg in sed/awk / scripting erfolgreich geträubt... Aber ich weiss, dass mir dadurch viel (möglichkeiten) entgeht.

cheasy: danke, werde ich mir nacher anschauen.
 
Da ich gerade meine Gedanken entspannen wollte, hier mal ein kleiner Ansatz mit jhead, grep und cut :)

Code:
      1 #!/bin/sh
      2 
      3 for file in *.jpg
      4 do
      5   model=`jhead $file | grep "Camera model" | cut -c 16-`
      6   echo $model" - "$file
      7 done | sort

Die Ausgabe wäre wie folgt:

Code:
tigion@redthree[Dresden]%>~/scripte/tigion_sort_camera_model
Canon PowerShot A70 - foto_dresden_010.jpg
Canon PowerShot A70 - foto_dresden_011.jpg
Canon PowerShot A95 - foto_dresden_012.jpg
Canon PowerShot A95 - foto_dresden_013.jpg
tigion@redthree[Dresden]%>
 
Zurück
Oben