Bilder nach Datum in EXIF-Informationen sortieren und umbenennen

14974
skazhy

Ich habe ein Durcheinander in meinem Fotoordner. Ich möchte sie nach Datum in EXIF-Informationen sortieren und nach Datum umbenennen (wie 001.jpg, 002.jpg usw.).

Wie kann ich das in Linux machen? Ich habe ImageMagick bereits für einige grundlegende Massenverarbeitungsaufgaben verwendet (Konvertierung und Größenänderung usw.). Kann ich es für diese Aufgabe verwenden?

8

7 Antworten auf die Frage

19
user285690

Unter Linux können Sie den Befehl exiftool verwenden . Aus irgendeinem Grund enthält das Online-Handbuch nicht den Abschnitt "RENAMIERUNGSBEISPIELE", der mir den wesentlichen Hinweis gab.

Für JPG-Dateien sollten nur die folgenden Befehlsaufrufe ausgeführt werden:

exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder> 

Erläuterung:

  • -r ist für die Rekursion
  • '-FileName<CreateDate'weist exiftool an, die Datei entsprechend ihrem EXIF-Tag umzubenennen CreateDate(Sie können es aber auch mit anderen versuchen ModifyDate)
  • -d '%Y-%m-%d/%H_%M_%S%%-c.%%le'gibt an, wie der Dateinamensstring aus der Datumsquelle " CreateDate" erstellt wird (das " %-c" wird bei Dateikollisionen einen Zähler anhängen, das " %le" steht für "untere Dateierweiterung")
    • Hinweis : Ich habe " -FileName<..." hier verwendet, um die Dateien umzubenennen und sie innerhalb eines Schrittes in einen anderen Ordner zu verschieben. Das Handbuch weist Sie darauf hin, dass Sie die -Directory<...Syntax " " für Ordneroperationen verwenden müssen. Es hat für mich jedoch so funktioniert.

Sie sollten einige Zeit damit verbringen, das Handbuch dieses leistungsstarken Tools zu lesen. Vielleicht gibt es einen noch kürzeren Weg: D

Die Umbenennungsbeispiele in der Dokumentation: http://www.sno.phy.queensu.ca/~phil/exiftool/exiftool_pod.html#renaming_examples. rwoo vor 7 Jahren 1
5
harrymc

Testen Sie dieses kostenlose Produkt: AmoK Exif Sorter .

2
mcepl

The most simple way is to just import files into jbrout ... then (optionally) all files can have names changed to something time oriented. Or you may find, that you do not need changing names at all (and jbrout is sufficient).

1
celebdor

Ich habe ein kleines und nicht sehr optimiertes Python-Skript erstellt, das bei I Think das tut, was Sie beabsichtigen:

1 import pyexiv2, sys, os, time, datetime, random 2 dirname = sys.argv[1] 3 flist=os.listdir(dirname) 4 dic = dict() 5 for fname in flist: 6 metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname) 7 metadata.read() 8 tag = metadata['Exif.Image.DateTime'] 9 timestamp = int(time.mktime(tag.value.timetuple())) 10 #print fname, ' ', tag.value, ' ', timestamp 11 try: 12 dic[timestamp] = fname 13 except: 14 print fname, ' not processed.' 15  16 keys = dic.keys() 17 keys.sort() 18 i = 0  19 for k in keys: 20 os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg') 21 i+=1 
Sie müssen diese Bibliothek http://tilloy.net/dev/pyexiv2/ installieren. celebdor vor 13 Jahren 0
1
Patrik Wallander

Damit es in Debian Lenny funktioniert, versuchen Sie Folgendes:

import pyexiv2, sys, os, time, datetime, random dirname = sys.argv[1] flist=os.listdir(dirname) dic = dict() for fname in flist: image = pyexiv2.Image(sys.argv[1]+'/'+fname)  #metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname) #metadata.read() image.readMetadata()  tag = image['Exif.Image.DateTime'] timestamp = int(time.mktime(tag.timetuple())) #print fname, ' ', tag.value, ' ', timestamp try: dic[timestamp] = fname except: print fname, ' not processed.'  keys = dic.keys() keys.sort() i = 0  for k in keys: os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg') i+=1 
1
frankmannen

In PHP habe ich so etwas gemacht:

<?php  $path = "./path/to/images"; $files = scandir($path);  foreach ( $files as $file ) { if ( $file[0] === "." ) { continue; } $ext = end(explode(".", $file));  $suffix = "image";  $exif = exif_read_data($path."/".$file, 'EXIF'); $datetime = str_replace("/","-", $exif['DateTimeDigitized']);  rename($path."/".$file, $path."/".$datetime.$suffix.".".$ext); } 
0
David Tonhofer

Während wir dabei sind, ist hier einer, der eher "gonzo-programmiert" ist bash, indem exiftooler mehrere Verzeichnisse und / oder einzelne Dateien in einem Durchgang freigibt. Es werden Dateien übersprungen, die über unbekannte MIME-Typen verfügen.

Es benennt Fotos mit dem DateTimeOriginalEXIF-Tag um (das Ergebnis ist 001.jpgaber nicht 2015-12-22_14:43:15.jpg.)

Wenn es einen Namenskonflikt ist, sind Indexzahlen angewendet: 2015-12-22_14:50:57.1.jpg.

Kann nützlich sein: relabel_photo_with_datetimeoriginal.sh