命令打印目录内像素大小的图像



是否可以列出目录中像素大小大于或小于x的所有图像?我在另一个线程上发现了这个命令

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

这个命令对于*.png很有效,但是当我将其更改为*.jpg时,结果变得太疯狂了。见下文。我想把结果写入一个日志文件,以便以后可以从我的产品目录中删除这些图像。

* . png输出

50 x 50 ./data/catalog/agsquare.png
220 x 138 ./data/catalog/brickwall_@2X.png
3 x 3 ./data/catalog/dots.png
98 x 98 ./data/catalog/grid-noise.png

*jpg输出(像素大小被忽略,这个命令明显有问题)

./data/background/fashion-shirt.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1920x1440, frames 3
./data/background/grey-bag.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1920x1280, frames 3

操作系统:Ubuntu 18.04.5 LTS

file输出1 x 2为PNG,1x2为JPEG。你的命令需要空格

相反,可以使用ImageMagick的identify之类的工具,它可以以格式独立的方式完成此操作:

find . ( -name '*.jpg' -o -name '*.png' ) 
-exec identify -format '%w %h %in' {} + |
awk '$1 < 250'

按照最简单到更重的顺序,您有几个选项:

  • feh
  • exiftool
  • ffprobe-ffmpeg的小伙伴
  • ImageMagickidentify

根据Ubuntu包库,你应该在Ubuntu 18 LTS中安装feh,所以你可以使用:

feh -L "%f:%w:%h"  *.jpg *.png

small.png:10:10
red.jpg:8:8
redhat.jpg:254:255

注意feh也接受—min-dimension—max-dimension作为过滤器。因此,对于所有宽度大于640px的图像,使用:

feh --min-dimension 640x0 -L "%f:%w:%h"  *.jpg *.png

您也可以使用exiftool来查找和打印高度或宽度小于100像素的图像,如下所示:

exiftool -p '$filename:$imagewidth:$imageheight' -if '$imagesize and ($imagewidth<100 or $imageheight<100)' -q *.jpg *.png

black.jpg:8:8
red.jpg:8:8
small.png:10:10

如果您使用的是来自Redmond的"操作系统">,请将单引号替换为双引号。

注意exiftool是一个明显更小的ImageMagick.


Ubuntu 18 LTS还应该包括ffmpeg和它的小伙伴ffprobe,所以你可以这样做:

ffprobe -v error -select_streams v -show_entries stream=width,height  -of csv=p=0:s=x IMAGEFILE

或与ImageMagick,使用此命令查找宽度为<100:

的图像
magick identify -format '%f:%w:%hn' *png *jpg | awk -F: '$2<100'

多亏了另一个家伙,我移除了x周围的空格,它工作了。没有提到我不想使用任何工具,在我的服务器上找不到其他命令。

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

最新更新