Exiv2 scheint mit Batch-Operationen recht gut zu funktionieren, indem alle generierten abgeleiteten Dateien den gleichen Stammdateinamen mit einer anderen Erweiterung beibehalten.
Meine Mission ist es, die Metainformationen aus einer Master-JPG-Datei zu ziehen und sie dann auf mehrere vorhandene kleinere Versionen der Datei anzuwenden. Ich habe...
Photo1.jpg - contains meta information
thumb_Photo1.jpg - no meta information
sample_Photo1.jpg - no meta information
Im Moment verwende ich exiv2, um die Metainformationen aus Photo1.jpg herauszuziehen, was zu einer Datei führt ...
Photo1.xml
Als Nächstes möchte ich diese Metadaten auf die Miniaturansichts- und Beispieldateien anwenden. Mit Exiv2 finde ich keine Möglichkeit, es mit etwas anderem als Dateien mit entsprechenden Basisnamen zum Laufen zu bringen. Daher kann ich Photo1.xml nicht auf thumb_Photo1.jpg anwenden, sondern nur auf Photo1.jpg.
Im Moment umgehe ich das, indem ich Kopien der XML-Datei anfertige und mir das hier belasse ...
Photo1.jpg - contains meta information
Photo1.xml - derived from Photo1.jpg
thumb_Photo1.jpg - no meta information
thumb_Photo1.xml - copy of Photo1.xml
sample_Photo1.jpg - no meta information
sample_Photo1.xml - copy of Photo1.xml
Wenn dies erledigt ist, kann ich dann exiv2 ausführen, um dem Daumen und den Beispiel-JPEGs Tags hinzuzufügen. Danach lösche ich die XML-Dateien und hinterlasse drei Dateien, die alle identisch getaggt sind.
Obwohl das obige sehr gut funktioniert, frage ich mich, ob ich eine exiv2-Option verpasst habe, die tief in der Dokumentation vergraben ist und es einem ermöglicht, ein JPEG aus einer XML-Datei mit einem anderen Basisnamen zu markieren.
exiv2
scheint es wirklich vorzuziehen, die Basisnamen von Bilddateien und Sidecar-/Metadatendateien übereinstimmend zu halten. Sie könnten das Erstellen/Löschen des Kopierens/Umbenennens der Metadatendateien wie bei Ihnen automatisieren (Skript).
Für das, was Sie tun möchten, würde ich jedoch dringend empfehlen, exiftool
. Es folgt dem Unix-Stream-Paradigma viel genauer. Sie können mit dem folgenden Befehl tun, was Sie wollen :exiftool
> exiftool -TagsFromFile Photo1.jpg *_Photo1.jpg
2 image files updated
Dies hat den Vorteil, dass die Metadatendateien nicht als Zwischenschritt erstellt werden müssen; es kopiert lediglich die Daten von Photo1.jpg in eine beliebige Datei, die dem Muster entspricht *_Photo1.jpg
.
exiv2
die Zwischendateien bei der Verwendung unerwünscht und erfordern zusätzliche Arbeit. Daher die Frage des OP. =)Hast du es mal so versucht:
cat Photo1.xml | exiv2 -i - thumb_Photo1.jpg
Dieser Befehl sendet den Inhalt von Photo1.xml an STDOUT und der nächste Befehl verwendet ihn als STDIN und fügt ihn in die Datei thumb_Photo1.jpg ein.
PS In der Manpage von exiv2 sehe ich dieses Beispiel:
exiv2 -e{tgt}- filename|xmllint .... | exiv2 -i{tgt}- filename
cat Photo1.xml | ...
statt echo Photo1.xml | ...
. Auch dies würde als „ unnützer Einsatz von Katzen “ oder „Katzenmissbrauch“ qualifiziert. =) Verwenden Sie einfach die stdin-Umleitung:exiv2 -i - thumb_Photo1.jpg < Photo1.xml
Inkista
exiftool -AllTagsFromFile=Photo1.jpg *_Photo1.jpg
du nicht mit einem einzigen Befehl tun, was du willst?scottbb
Inkista
JSH