在 exiftool -if 条件中使用变量
Using variable in exiftool -if condition
我正在尝试根据在 IPTC 元数据中找到的关键字重新组织图像。更具体地说,我需要根据 exiftool
的 subject
伪标签中的物种名称将图像分类到目录中。
为此,我在 .txt
文件 (species_ls.txt) 中编译了关键字,每个关键字都在一个新行中,例如:
Asian Tortoise
Banded Civet
Banded Linsang
...
为了对图像进行排序,我创建了以下 for 循环,循环遍历文档的每一行,sed
提取关键字。这里,$line_no
是 species_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"
希望对您有所帮助!
我正在尝试根据在 IPTC 元数据中找到的关键字重新组织图像。更具体地说,我需要根据 exiftool
的 subject
伪标签中的物种名称将图像分类到目录中。
为此,我在 .txt
文件 (species_ls.txt) 中编译了关键字,每个关键字都在一个新行中,例如:
Asian Tortoise
Banded Civet
Banded Linsang
...
为了对图像进行排序,我创建了以下 for 循环,循环遍历文档的每一行,sed
提取关键字。这里,$line_no
是 species_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"
希望对您有所帮助!