如何通过 exif 标签递归列出图像?

如何通过 exif 标签递归列出图像?

我有一个目录,里面全是图片,所有图片都带有各种“关键字”标签。我怎样才能(在 Linux shell 中)列出全部图像包含keyword1和/或keyword2

答案1

好的,以下是我整理的内容:

exiftool -ext .JPG -fast -p '$directory/$filename;$Keywords' -qq -r -m . 2> /dev/null | grep -i '\;.*keyword1\|keyword2\|keyword3' | sed 's/\;.*//'

这将生成一个包含任一关键字的所有文件名的干净列表,您可以根据需要输入任意数量的文件;然后,您可以将其提供给查看器以动态构建图库/幻灯片,就像在这个最终函数中一样:

px-image-tag-viewer () {
    TAGS=
    SLIDESHOW_OPS=
    for i in ${*}; do
        [[ ${i} =~ '^[0-9]+$' ]] && SLIDESHOW_OPS="-D${i} --fullscreen" || TAGS+="${i}\|"
    done

    exiftool -ext .JPG -fast -p '$directory/$filename;$Keywords' -qq -r -m . 2> /dev/null | grep -i "\;.*${TAGS: : -2}" | sed 's/\;.*//' > /tmp/imglist.txt 
    feh ${SLIDESHOW_OPS} --auto-zoom --filelist /tmp/imglist.txt
    rm -fv /tmp/imglist.txt
}

进入目录并像这样调用它:

px-image-tag-viewer holidays sigma horiz 5

标签之间用空格分隔,幻灯片放映的秒数可选。

答案2

exiftool您可以使用其-if条件语法和打印输出标志单独实现您需要的功能,-p如下所示:

exiftool -ext JPG -if '$Keywords =~ /(keyword1|keyword2)/' -p '$directory/$filename' -r .

这将使用正则表达式匹配关键字,递归扫描当前目录,并打印出它们的文件名。它与grep和 的作用差不多sed,但仅使用exiftool和 。由于表达式类似于 Perl,因此您可以获得更多功能-if,并且它不仅可以执行字符串匹配(例如gtlt其他 Perl 运算符)。

根据需要调整或删除-ext JPG其他文件格式的检查(不区分大小写),并同样调整-p选项以控制输出的格式。

相关内容