我有一个大文件夹树,并且想要创建一个脚本来打开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行。
答案 0 :(得分:2)
只需使用awk,而不是所有这些管道!
% 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 /'。