Exiv2, похоже, неплохо работает с пакетными операциями, сохраняя все сгенерированные производные файлы с одним и тем же корневым именем файла с другим расширением.
Моя миссия состоит в том, чтобы извлечь метаинформацию из основного файла jpg, а затем применить ее к нескольким существующим меньшим версиям файла. У меня есть...
Photo1.jpg - contains meta information
thumb_Photo1.jpg - no meta information
sample_Photo1.jpg - no meta information
Прямо сейчас я использую exiv2 для извлечения метаинформации из Photo1.jpg, в результате чего получается файл...
Photo1.xml
Далее я хотел бы применить эти метаданные к файлам эскизов и образцов. С Exiv2 я не могу найти способ заставить его работать с чем-либо, кроме файлов с соответствующими базовыми именами. Таким образом, я не могу применить Photo1.xml к thumb_Photo1.jpg, только к Photo1.jpg.
На данный момент я обхожу это, делая копии файла XML, оставляя мне это...
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
Сделав это, я могу запустить exiv2, чтобы добавить теги к большому пальцу и образцам JPEG. После этого я удаляю XML-файлы, оставляя три файла с одинаковыми тегами.
Хотя приведенное выше работает очень хорошо, мне интересно, не пропустил ли я опцию exiv2, скрытую глубоко в документации, которая позволяет пометить JPEG из XML-файла с другим базовым именем.
exiv2
кажется, действительно предпочитает, чтобы базовые имена файлов изображений и файлов sidecar/metadata совпадали. Вы можете автоматизировать (скрипт) создание/удаление копирования/переименования файлов метаданных, как у вас.
Однако для того, что вы хотите сделать, я настоятельно рекомендую использовать exiftool
. Он более точно следует парадигме потока unix. Вы можете делать то, что хотите, используяexiftool
следующую команду:
> exiftool -TagsFromFile Photo1.jpg *_Photo1.jpg
2 image files updated
Это имеет то преимущество, что не нужно создавать файлы метаданных в качестве промежуточного шага; он просто копирует данные из Photo1.jpg в любой файл, соответствующий шаблону *_Photo1.jpg
.
exiv2
промежуточные файлы нежелательны и требуют дополнительной работы. Отсюда и вопрос ОП. знак равноВы пробовали так:
cat Photo1.xml | exiv2 -i - thumb_Photo1.jpg
Эта команда отправит содержимое Photo1.xml в STDOUT, а следующая команда будет использовать его как STDIN и вставит в файл thumb_Photo1.jpg.
PS На справочной странице exiv2 я вижу такой пример:
exiv2 -e{tgt}- filename|xmllint .... | exiv2 -i{tgt}- filename
cat Photo1.xml | ...
вместо echo Photo1.xml | ...
. Кроме того, это может квалифицироваться как « бесполезное использование кошек » или «жестокое обращение с кошками». =) Просто используйте перенаправление stdin:exiv2 -i - thumb_Photo1.jpg < Photo1.xml
инкиста
exiftool -AllTagsFromFile=Photo1.jpg *_Photo1.jpg
сделаете ли вы то, что хотите, с помощью одной команды?Скоттбб
инкиста
JSH