У меня есть каталог, полный каталогов с изображениями, все с различными тегами "ключевых слов". Как я могу (в оболочке Linux) перечислить все изображения, содержащие keyword1
и / или keyword2
?
2 ответа
Вы можете добиться того, что вам нужно с exiftool
в одиночку, используя свой -if
условный синтаксис и вывода на печать флаг -p
, как так:
exiftool -ext JPG -if '$Keywords =~ /(keyword1|keyword2)/' -p '$directory/$filename' -r .
Это рекурсивно сканирует текущий каталог, используя совпадение регулярных выражений по ключевым словам, распечатывая их имена файлов. Это более или менее то, что вы имеете с grep
и sed
, но используя только один exiftool
. Вы получаете больше возможностей, потому что выражение -if
является Perl-подобным и может делать больше, чем просто сопоставление строк (например, gt
, lt
и другие операторы Perl).
Отрегулируйте или удалите -ext JPG
как требуется (она чувствительна к регистру) для других форматов файлов, а также настройте параметр -p
для управления форматированием вывода.
Хорошо, вот что я собрал:
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
С тегами, разделенными пробелами, и необязательным количеством секунд для слайд-шоу.