Grep-搜索不同匹配的exiftool输出

时间:2013-02-13 20:58:42

标签: bash grep exiftool

我有一个大文件夹树,并且想要创建一个脚本来打开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是关键字搜索值。现在,我的解决方案是使用两个循环,每个循环执行exiftool调用以获得不同的grep值。如何执行单个exiftool调用,对于匹配的关键字,关联的文件名将传递给列表。

编辑 - 澄清:

如果匹配退出关键字字段,我想打印出FileName行。但是,关键字在文本输出中的FileName下面存在~20行。

3 个答案:

答案 0 :(得分: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 }
'

当然,您也可以在同一个程序中完成所有文本处理。

答案 1 :(得分:1)

如果我正确理解了您的问题,则您需要过滤多个关键字。使用egrep| - 运算符:

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

而$ 1是第一个关键字,$ 2是第二个关键字。 <{1}}可以替换为egrep,因为grep -E已被弃用。

编辑(问题实际上已经改变):你应该提出一个新问题。

您可以对所有文件进行循环,如果文件与您的某个关键字匹配则使用它。 E.g:

egrep

答案 2 :(得分:1)

使用exiftool -if选项:

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