Exiftool - изменить формат метаданных

Предположим, у меня есть 5000 изображений со следующими метаданными в поле LABEL.

0001 ELEPHANT
0002 ELEPHANT
0003 ELEPHANT
...
4999 ELEPHANT
5000 ELEPHANT

Я хочу изменить формат на:

ELEPHANT-0001
ELEPHANT-0002
ELEPHANT-0003
…
ELEPHANT-4999
ELEPHANT-5000

Другими словами, я хочу сделать следующее для поля метаданных нескольких изображений:

#### ИМЯ -> ИМЯ - ####

Из того, что я могу собрать, может быть два способа сделать это

  1. Не обращайте внимания на текущие метаданные в изображениях и ссылайтесь на файл (простой текст? Csv?), Который я готовлю отдельно; или же
  2. Считайте метаданные файла в виде строки, определите пробел и число, предшествующее пробелу, сохраните этот номер и, наконец, создайте новую строку, объединив число и пробел и добавив между ними дефис!

Какие-либо предложения?

1 ответ

Расширяя ответ, который я дал на форумах exiftool.

Основная команда будет
exiftool "-LABEL<${LABEL;s/(\d{4}) (.*)/$2-$1/}" <FileOrDir>

Вы в основном хотите скопировать тег в тот же тег с некоторыми изменениями. Опция копирования тега - это символ меньше (или больше) < или же >, Распространенной ошибкой является использование знака равенства = который используется для назначения статического значения тегу.

Для внесения изменений в тег требуется опция Advance Formatting, которая на самом деле представляет собой встроенный Perl-код. В этом примере тег обрабатывается как строка perl и используется подстановка регулярных выражений. Это соответствует и захватывает первые четыре цифры (\d{4}), соответствует пробелу (но не захватывает его), затем сопоставляет и захватывает остальную часть тега (.*), Два захвата присваиваются переменным $1 а также $2соответственно. В замене половина замены $2-$1, два захвата поменялись местами с дефисом между ними.

Чтобы в полной мере воспользоваться преимуществами предварительного форматирования, полезно знать некоторые базовые знания Perl и Regex.

Если вы уверены в команде, вы можете добавить -overwrite_original подавить генерацию файлов резервных копий и -r перечислять в подкаталоги.

Другие вопросы по тегам