按大小查找图像:find / file / awk

按大小查找图像:find / file / awk

我一直在尝试查找一定高度(超过 500px)的 png 图像文件。我知道这file会返回图像尺寸。例子:

$ file TestImg1a.png

TestImg1a.png: PNG image data, 764 x 200, 4-bit colormap, non-interlaced   

但我需要用它来查找高度超过 500px 的目录中的所有文件。我知道如何打印所有文件,无论高度如何:

find . -name '*.png' | xargs file | awk '{print $7 " " $1}'

但如何将 7 美元限制在大于 500 的结果上呢?

答案1

exiftool -q -r -ext png -if '$ImageHeight > 500' -p '$Directory/$FileName' .

答案2

我知道这有点矫枉过正,但是,无论文件如何显示信息,这每次都会起作用(即使文件名中有空格)。

find . -name '*.png' -exec file {} \; | sed 's/\(.*png\): .* \([0-9]* x [0-9]*\).*/\2 \1/' | awk 'int($1) > 500 {print}'

它打印图片和文件的尺寸

解释:

  1. find.png 下所有名为 *.png 的文件并为每个文件创建一个文件

  2. 用于sed仅打印文件名和尺寸,然后重新排序以首先打印尺寸

  3. 用于awk测试第一个数字(图片的高度),确保其大于 500,如果是打印尺寸和文件名,如果不是,则不执行任何操作。

答案3

您还可以使用identifyImageMagick:

find . -name \*.png -print0|xargs -0 identify -format '%h %f\n'|
awk '$1>500'|cut -d' ' -f2-

或者在 OS X 中:

mdfind 'kMDItemFSName=*.png&&kMDItemPixelHeight>500' -onlyin .

答案4

find . -name '*.png' -exec file "{}" \+ | awk -F"(: +PNG image data|,| x )" '$4 > 500 {print $4" "$1}'

相关内容