在 exiftool -if 条件中使用变量

Using variable in exiftool -if condition

我正在尝试根据在 IPTC 元数据中找到的关键字重新组织图像。更具体地说,我需要根据 exiftoolsubject 伪标签中的物种名称将图像分类到目录中。

为此,我在 .txt 文件 (species_ls.txt) 中编译了关键字,每个关键字都在一个新行中,例如:

Asian Tortoise Banded Civet Banded Linsang ...

为了对图像进行排序,我创建了以下 for 循环,循环遍历文档的每一行,sed 提取关键字。这里,$line_nospecies_ls.txt 文件中的行数,image_raw 是包含图像的目录。

for i in 'seq 1 $line_no'; do
    sp_name=$(sed -n "${i}p" < species_ls.txt)
    exiftool -r -if '$subject=~/${sp_name}/i' \
        '-Filename=./${sp_dir}/%f%+c%E' image_raw`

尽管 for 循环运行,但在 exiftool 中的 -if 标志中没有满足任何条件。我假设这是因为变量 sp_name 没有正确传递到条件中。

如有任何建议或更好的方法,我们将不胜感激。

有条件的行,与其用单引号(' '),不如用双引号(" ")。

单引号表示内容按字面意思传递,这意味着您的变量不会扩展。

为了克服 $subject 行的扩展(我猜你不想要),你可以在 $ 前面放一个 \ 来避免它被读作变量。

这一行现在应该是这样的:

exiftool -r -if "$subject=~/${sp_name}/i"

希望对您有所帮助!