Wie kann ich Bilder rekursiv nach Exif-Tag auflisten?

328
yPhil

Ich habe ein Verzeichnis voller Verzeichnisse mit Bildern, alle mit verschiedenen "Stichwort" -Tags. Wie kann ich (in einer Linux-Shell) alle Images auflisten, die keyword1und / oder enthalten keyword2?

0
Unter Windows, Linux, MacOS X, BeOS, Plan 9, Minix, Android, IOS, Kaffeemaschine? mtak vor 6 Jahren 1

2 Antworten auf die Frage

0
yPhil

OK, here is what I put together :

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

This will produce a clean list of all the filenames containing either of the keywords, of which you can put as many as you want ; You can then feed it to a viewer to construct a gallery / slideshow on the fly, like in this final function :

px-image-tag-viewer () { TAGS= SLIDESHOW_OPS= for i in ${*}; do [[ $ =~ '^[0-9]+$' ]] && SLIDESHOW_OPS="-D$ --fullscreen" || TAGS+="$\|" done exiftool -ext .JPG -fast -p '$directory/$filename;$Keywords' -qq -r -m . 2> /dev/null | grep -i "\;.*$" | sed 's/\;.*//' > /tmp/imglist.txt feh $ --auto-zoom --filelist /tmp/imglist.txt rm -fv /tmp/imglist.txt } 

Get in the directory, and invoke it like this :

px-image-tag-viewer holidays sigma horiz 5 

With the tags separated by spaces, and an optional number of seconds for a slideshow.

0
davidjb

exiftoolMit der -ifbedingten Syntax und dem -pDruckausgabeflag können Sie das erreichen, was Sie allein benötigen :

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

Dadurch wird das aktuelle Verzeichnis rekursiv durchsucht, wobei ein regulärer Ausdruck für die Schlüsselwörter verwendet wird und der Dateiname ausgegeben wird. Es ist mehr oder weniger was Sie habengrep und haben sed, aber nur exiftoolalleine. Sie erhalten mehr Macht, weil der -ifAusdruck Perl-like und kann mehr als nur String - Matching (wie tun gt, ltund andere Perl Operatoren).

Stellen Sie das ein oder aus -ext JPG Prüfung für andere Dateiformate an sie (falls Groß- und Kleinschreibung wird nicht berücksichtigt), und passen Sie die -pOption an, um die Formatierung der Ausgabe zu steuern.