是否可以列出目录中像素大小大于或小于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
的小伙伴-
ImageMagick
identify
根据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}'