Es gibt eine Reihe von Fotos mit Zeitstempeln in ihren Dateinamen wie diesen:
Photo on 3-09-12 at 9.24 PM #2.jpg
Photo on 3-09-12 at 9.24 PM #1.jpg
Photo on 3-09-12 at 8.23 PM.jpg
usw.
(„3-09-12“, bedeutet „3. September 2012“ oder TT-MM-JJ)
Diese Fotos haben jedoch überhaupt keine EXIF-Daten. Bevor Sie sie in eine größere Sammlung importieren, wie würden Sie diese Informationen weiterleiten exiftool
und sie auch anweisen, neue Zeitstempel als EXIF-Daten hinzuzufügen, und zwar alles aus den Dateinamen der Fotos?
Aktualisieren: (Der jetzige Teil 1) meiner Frage zum Parsen von Dateinamen mit TT-MM-JJ und 12-Stunden-Zeit wurde sehr freundlich von @Stephane beantwortet. Aber ich habe festgestellt, dass derselbe Stapel von Fotos Dateinamen mit einer Variation enthält, die ich übersehen hatte. Ich hoffe, es macht mehr Sinn, einen „Teil 2“ hinzuzufügen, anstatt eine ganz neue Frage zu beginnen.
Zusamenfassend:
Wie könnte ich @Stephanes brillante Antwort ändern –
exiftool '-CreateDate<${FileName;use Date::Manip;
Date_Init("DateFormat=non-US");
/on (.*?at.*?[AP]M)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
}' ./*on\ *at*[PA]M*.jpg
– damit es möglicherweise mit dem unten stehenden Dateinamenformat funktioniert, das sich geringfügig vom ersten Teil der Frage unterscheidet, da es JJJJ-MM-TT und eine 24-Stunden-Zeit verwendet:
Photo on 2010-09-15 at 18.44 #4.jpg
Photo on 2010-09-15 at 18.44 #3.jpg
Photo on 2010-09-15 at 18.44.jpg
Weitere Erklärung:
Date::Manip
Beim Versuch, diesen Teil von Stephanes Skript zu bearbeiten , wird offenbar, dass ich nicht weiß, was in den wichtigsten Teilen davon vor sich geht.
Ich habe versucht, die Date_Init
Zeile wegzulassen, da wir wieder zu einem ISO-ähnlichen Ganzjahresdatumsformat zurückgekehrt sind und dann
/on (.*?at.*?)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
' ./*on\ *at*.jpg
Aber exiftool
gibt mir no writeable tags
und FileName not defined
. Anweisungen beihttp://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.podscheinen (zumindest für mich) nicht hilfreich zu sein, um zu verstehen, was mit diesen Punkten, diesem „y“ am Zeilenanfang, dem Semikolon usw. los ist, und sie sind ziemlich ungoogelnd :S
Antwort1
Versuchen:
exiftool '-CreateDate<${FileName;use Date::Manip;
Date_Init("DateFormat=non-US");
/on (.*at.*?)(?: #\d+)?\.jpg$/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
}' ./*on\ *at*.jpg
(möglicherweise müssen Sie das Date::Manip
perl
Modul installieren).
Das -Tag<value
setzt das entsprechende Tag. Das ${tag;perl-code}
kann verwendet werden, um auf den Wert von zu erweitern, tag
nachdem dieser durch das verarbeitet wurde perl-code
.
Date::Manip
Hier besteht der Plan darin, die Funktion von zu verwenden, UnixDate
um das Datum im Dateinamen zu analysieren und in ein für das CreateDate
Tag ( 2011-04-15 21:38:00
) akzeptables Format zu konvertieren.
Date::Manip
versteht viele gängige Datumsformate. Beispielsweise versteht es 3-09-12 at 9:24 PM
(obwohl Sie angeben müssen, ob es sich um die US-amerikanische oder nicht-US-amerikanische Konvention handelt, bei der der Tag oder der Monat zuerst steht) und 2010-09-15 at 18.44
(beachten Sie das :
anstelle von .
).
Also extrahieren wir diesen Teil aus dem Dateinamen, konvertieren ihn .
in :
und übergeben ihn an UnixDate
.