У меня есть каталог, полный каталогов с изображениями, все с различными тегами "ключевых слов". Как я могу (в оболочке Linux) перечислить все изображения, содержащие keyword1 и / или keyword2 ?

2 ответа2

0

Вы можете добиться того, что вам нужно с 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 для управления форматированием вывода.

0

Хорошо, вот что я собрал:

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

С тегами, разделенными пробелами, и необязательным количеством секунд для слайд-шоу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .