Exiftool - 修改元数据格式

时间:2017-06-07 04:11:28

标签: exiftool

假设我在LABEL字段中有5000个带有以下元数据的图像。

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

我希望将格式更改为:

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

换句话说,我想对多个图像的元数据字段执行以下操作:

#### NAME - > NAME - ####

从我可以收集的信息中可以有两种方法

  1. 忽略图像中的当前元数据,并引用我单独准备的(纯文本?csv?)文件;或
  2. 将文件的元数据作为字符串读取,识别空格和空格前的数字,保存该数字,最后通过连接数字和空格并在中间添加连字符来创建新字符串!
  3. 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

扩展我在exiftool forums中给出的答案。

基本命令是
exiftool "-LABEL<${LABEL;s/(\d{4}) (.*)/$2-$1/}" <FileOrDir>

您基本上想要将标记复制到同一个标记中,并进行一些修改。复制标记的选项是小于(或大于)符号<>。一个常见的错误是使用等号=,用于为标记分配静态值。

要对标记进行修改,需要使用“高级格式化”选项,这实际上是一些内联的perl代码。在此示例中,标记被视为perl字符串,并使用正则表达式替换。它匹配并捕获前四位数(\d{4}),匹配空格(但不捕获它),然后匹配并捕获标记(.*)的其余部分。这两个捕获分别分配给变量$1$2。在替换替换$2-$1的一半中,两个捕获与它们之间的连字符相反。

要充分利用高级格式化,一些基本的perl和正则表达式知识是有帮助的。

一旦确定该命令,就可以添加-overwrite_original来禁止生成备份文件,并-r递归到子目录中。