与 exiftool 反向匹配

Inverse matching with exiftool

我根据exiftoolsubject伪标签中的内容对图片进行排序,一般是这样的:

15: D101-5-12 1: Elephas maximus 16: Bob

通常我会根据第二行的物种名称对图像进行排序,但是,对于某些图像,第二行丢失了,我想过滤掉这些图像。

图片之间的第一行和第三行差异很大,所以我无法利用这些。相反,我一直在尝试针对围绕该主题的其他问题建议的各种 'inverse matching' 方法,但没有成功。例如,以下不起作用:

exiftool -r -if '$subject=~/^((?!1:\s).)*$/i' \
'-Filename=./image_sorted/%f%+c%E' image_directory

关于如何使用 exiftool 执行此操作的任何想法?

既然我知道你所有的物种关键字都以 1: 开头,我想我可以为你做一个更好的命令。

exiftool -r '-Filename=./image_sorted/%f%+c%E' '-Filename<./${Subject;$_=undef if not s/.*(?:^|, )1: (.*?)(,|$).*//}/%f%+c%E' ./image_directory/

此命令会将任何没有以 1: 开头的关键字的文件移动到 image_sorted 目录中。如果它确实有一个以 1: 开头的关键字,它将根据物种名称将其移动到一个目录中,这将覆盖先前的选项以将其移动到 image_sorted 目录中。

此命令将对任何未设置 1: Species Name 关键字的文件发出 Warning: [minor] Tag 'Subject' not definedWarning: No writable tags set 警告。这些可以安全地忽略,您可以通过添加 -m 选项完全避免它们。