如何用exiftool筛选subject伪标签缺失指定行的图片?
如何用ExifTool基于Subject伪标签筛选并分类图片?
我懂你的需求——要靠Subject伪标签里的物种行(就是格式里1: Elephas maximus那一行)给图片分类,同时把没这行的图片筛出去。你之前试的反向匹配命令没生效,问题出在多行正则的处理逻辑上,ExifTool默认是单行模式,你的正则没考虑这一点。
问题根源
你之前写的正则^((?!1:\s).)*$是单行模式下的写法,这时候^和$代表的是整个Subject文本的开头和结尾,不是每行的首尾。所以这个正则只会匹配完全不含1:\s字符的整个文本,但很多图片的Subject里虽然没目标行,却有首行、末行这类其他内容,自然匹配不上。
正确的解决方案
要准确检测Subject里是否存在目标行,得给ExifTool的正则开启多行模式(用(?m)修饰符),让^和$匹配每行的开头和结尾。
保留有物种行的图片并分类
执行下面的命令,会把符合条件的图片移动到image_sorted目录:
exiftool -r -if '$subject=~/(?m)^1:\s/' '-Filename=./image_sorted/%f%+c%E' image_directory
参数说明:
-r:递归处理image_directory下的所有子目录-if '$subject=~/(?m)^1:\s/':判断条件——Subject伪标签中存在以1:\s开头的行(也就是你要的物种行)-Filename=./image_sorted/%f%+c%E:重命名并移动文件,%f是原文件名,%+c是重复文件的自动序号(避免重名覆盖),%E是原文件扩展名
筛选出缺失物种行的图片
如果需要把没有目标行的图片单独移到另一个目录(比如missing_species),用反向匹配即可:
exiftool -r -if '$subject!~/(?m)^1:\s/' '-Filename=./missing_species/%f%+c%E' image_directory
这样就能精准筛选出你需要的图片,顺利完成分类啦!
内容的提问来源于stack exchange,提问作者Philipp HB
相关产品推荐
相关产品推荐

