0

大きなフォルダツリーがあり、キーワード検索に基づいてgThumbまたはその他の画像ビューアを開くためのスクリプトを作成したいと思います。 exiftoolはすでに私のシステムにインストールされています。とコマンド

exiftool -a -r -G1 -s $FILE 

データをフォーマットで出力します

[ExifTool]      ExifToolVersion                 : 8.60
[System]        FileName                        : 4-4_wlax_0127.jpg
[System]        Directory                       : .
[System]        FileSize                        : 6.3 MB
[System]        FileModifyDate                  : 2012:04:05 13:57:54-04:00
[System]        FilePermissions                 : rwxrwxrwx

現在、

exiftool -a -r -G1 -s . | grep Keywords | grep "$1*" 

メタデータのキーワード行を次のように出力します

[IPTC]          Keywords                        : 2012, Womens Lax, ..., ...

ここ$1で、はキーワード検索値です。今のところ、私の解決策は2つのループを使用し、それぞれexiftoolが異なるgrep値の呼び出しを実行することです。exiftool一致するキーワードに対して、関連付けられたファイル名がリストに渡される単一の呼び出しを実行するにはどうすればよいですか。

編集-明確化:

キーワードフィールドに一致するものが存在する場合、FileName行を出力したいと思います。ただし、Keywordは、テキスト出力のFileNameの約20行下に存在します。

4

3 に答える 3

2

これらすべてのパイプではなく、を使用してください。

% exiftool -a -r -G1 -s . | awk -v search='your search string here' '
    $2 ~ /FileName/ { filename = $0 }
    $2 ~ /Keywords/ && $0 ~ search { print filename }
'

これは、処理されるファイルごとFilenameに常に前に表示されることを前提としています。Keywords検索する文字列が複数ある場合は、それらをパイプで区切ってください(正規表現です!):

% exiftool -a -r -G1 -s . | awk -v search='first|second' '
    $2 ~ /FileName/ { filename = $0 }
    $2 ~ /Keywords/ && $0 ~ search { print filename }
'

(行全体ではなく)ファイル名だけが必要な場合は、おそらくこれがより適切な解決策です。

% exiftool -a -r -G1 -s . | awk -F': ' -v search='first|second|third' '
    $1 ~ /FileName/ { filename = $2 }
    $1 ~ /Keywords/ && $2 ~ search { print filename }
'

もちろん、同じプログラムですべてのテキスト処理を行うこともできます。

于 2013-02-13T21:35:30.203 に答える
2

exiftool-ifオプションを使用します。

exiftool -filename -s3 -if'$keywords =〜/somekeyword/'。

于 2013-02-14T13:26:50.947 に答える
1

私があなたの質問を正しく理解しているなら、あなたはあなたがフィルタリングしたい複数のキーワードを持っています。使用egrepと-|演算子:

exiftool -a -r -G1 -s . | grep Keywords | egrep "$1|$2" 

一方、$ 1が最初のキーワードで、$2が2番目のキーワードです。非推奨のasegrepに置き換えることができます。grep -Eegrep

編集(質問が実際に変更された後):新しい質問をする必要があります。

すべてのファイルをループすることができ、ファイルがキーワードの1つと一致する場合は、それを使用します。例えば:

for n in `ls`; do
    c=`exiftool -a -G1 -s $n | grep Keywords | egrep "$1|$2" | wc -l`
    if [ $c -gt 0 ]; then
         echo $n has matched
    fi
done
于 2013-02-13T21:03:38.453 に答える