Answers:
您可以使用identify
from imagemagick
,也可以使用以下命令:
find . -iname "*.jpg" -type f -exec identify -format '%w %h %i' '{}' \; | awk '$1<300 || $2<300'
使用-exec <command> '{}' \;
确保您的文件名中可以有空格,或者您可以使用
find . -iname "*.jpg" -type f | xargs -I{} identify -format '%w %h %i' {} | awk '$1<300 || $2<300'
其中-I{}
采用的同样的事情照顾。
我喜欢的identify
是您可以指定输出格式;在这种情况下'%w %h %i'
,它给出了图像的宽度,高度和完整路径名。然后,awk
表达式仅保留图像小于所需大小的那些行。
输出示例:
64 64 ./thumbsup.jpg
100 150 ./photomin.jpg
编辑:如果只需要文件名(rm
例如用于管道),只需$line
将awk
语句更改为$3
,则它将仅打印第三列。
'%w %h %i\n'
)以使其对我有用。
| xargs -I {} mv {} /destination/directory/
我认为接受的答案非常好,但是我想添加另一个可能的解决方案...
尽管我本人ImageMagick
现在最常使用工具,但我netpbm
是处理图像的老朋友。您可以使用以下命令查看任何格式的图像的大小:
anytopnm file | pamfile
这将生成如下所示的输出:
stdin: PPM raw, 1650 by 1275 maxval 255
为了回答“管道之后会发生什么?”的问题,我使用的while read
次数比以前多,xargs
因为它更灵活。我netpbm
对这个问题的回答如下:
find -iname \*.jpg | while read img; do \
anytopnm "$img" | pamfile | \
perl -ane 'exit 1 if $F[3]<300 || $F[5]<300' || rm -v "$img"; \
done
软件包中的identify
命令imagemagick
可以满足您的要求:
$ identify abc.jpg
abc.jpg JPEG 1952x3264 1952x3264+0+0 8-bit DirectClass 1.111MB 0.000u 0:00.000
同样,您将需要使用grep
来整理图像大小。
但是,我怀疑除非图像大小范围非常宽泛,否则仅使用它find
来删除给定尺寸以下的JPEG文件会更容易:
find -iname '*.jpg' -size -10k -delete
(如果不-delete
先检查就无法运行,则无法找到您想要保留的东西-否则删除之前不会提示您)。
| awk '$1<300||$2<300'
或| awk '$1<300||$2<300{print $3}'
(仅当需要第三列时)。