bash 中基于 IPTC 元数据的移动图像

Moving images based on IPTC metadata in bash

我正在尝试根据图像中的物种重新组织图像。在其他信息中,物种名称可以在 IPTC 元数据中找到(参见 link 到 Inspector image)。我试图在 macOS 上的 bash 中执行此操作,并尝试了以下代码(带有模板物种名称和目录):

find . -iname "*.jpg" -print0 | xargs -0 grep -l "Species Name" | xargs -0 -I {} mv {} ~/example/directory

我也试过使用exiftool包,相关信息在Subject标签中:

find . -iname "*.jpg" -print0 | xargs -0 exiftool -Subject | grep "Species Name" | xargs -0 -I {} mv {} ~/example/directory

但是,我收到以下错误消息,我认为这是误用 grep 或最后一个 xargs:

的结果

mv: rename (standard input) to ~/example/directory(standard input) : No such file or directory

有什么办法可以解决这个问题吗?先感谢您。

看起来 grep 的输出换行符在那里受到干扰,因为您使用的是干净的 -0 管道,您应该使用 grep 这样做 - 在 Linux 应该是 grep -Z ...(或 --null),不知道 Mac OS 是否有类似的。

Exiftool 可以根据文件元数据移动和重命名文件,并且为整个目录调用一次它比为循环中的每个文件单独调用它快得多 (Common Mistake #3)。

我相信您可以使用此命令进行排序:
exiftool -if '$subject=~/Species Name/i' -directory=~/example/directory .

细分:
-if '$subject=~/Species Name/i' 对 "Species Name" 的 Subject 标签进行正则表达式比较。我在最后加了i,不区分大小写做比较,按需修改。
-directory=~/example/directory 如果满足 -if 条件,则文件将移动到指定目录。