通过Linux Shell查找大于x像素的PNG图像

当你试图改变你的网站的设计,你必须关心你的文章内容中的图片的宽度。 我对我写的大多数文章有着名的大屏幕截图,所以如果我想增加侧边栏,了解哪些图片将太宽,以适应新的设计是至关重要的。

由于我是一个程序员,我很容易写一个小应用程序来做到这一点,但它让我开始思考...为什么我不能在Linux命令行上这样做?

我想到的第一件事是,PNG图像显示大小的数据,当你对它们运行“file”命令:

$ file image3.png
image3.png:PNG图像数据,613 x 657,8位/彩色RGBA,非隔行扫描

非常有用,因为这个网站上的图片的99%是PNG格式。 所以现在把它放在一个循环中的所有文件在我的上传目录:

$ for f in * .png; do file $ f; done

image.png:PNG图像数据,631 x 185,8位/彩色RGBA,非隔行扫描
image1.png:PNG图像数据,631 x 96,8位/彩色RGBA,非隔行扫描
image10.png:PNG图像数据,375 x 395,8位/彩色RGBA,非隔行扫描
image11.png:PNG图像数据,484 x 241,8位/彩色RGBA,非隔行扫描
-snipped-

这更有用,但我必须将数据拉到Excel或类似的应用程序中,以便对数据进行排序,所以我决定使用linux“cut”命令只拉出宽度列。

你会注意到-f5参数告诉cut使用第五列,而-d \有一个空格,它告诉cut使用空格作为分隔符。 斜杠\字符是一个转义字符,通知shell使用空格作为字符,而不是空格。

$ for f in * .png; do file $ f | cut -f5 -d \; done

631
631
375
484
-snipped-

不是完全有用的输出,是吗? 让我们通过一个bash if语句,然后只显示文件命令的输出,当宽度大于600像素。

注意在文件$ f |周围的(反引号)标记 cut ...“部分,表示`中的命令将作为单个输出处理,并输入到if语句中,其中使用-gt(大于)。 另外请注意,您需要在方括号[]的任一边的空格

for f in * .png; do if [`file $ f | cut -f5 -d \`-gt 600]; 然后文件$ f; fi; done

image.png:PNG图像数据,631 x 185,8位/彩色RGBA,非隔行扫描
image1.png:PNG图像数据,631 x 96,8位/彩色RGBA,非隔行扫描
image17.png:PNG图像数据,638 x 340,8位/彩色RGBA,非隔行扫描
image18.png:PNG图像数据,608 x 448,8位/彩色RGBA,非隔行扫描
-snipped-

现在我们有一个所有大于600像素宽的文件的列表。 你可以调整“文件$ f”在结尾只是回显文件名,如果你需要复制或移动到别的地方:

for f in * .png; do if [`file $ f | cut -f5 -d \`-gt 600]; 然后echo $ f; fi; done

image.png
image1.png
image17.png
image18.png
-snipped-

Linux shell是令人难以置信的强大! 这个解决方案对每个人都不是真的可行,但是知道如何使用shell是很好的,所以你可以在需要时完成这种类型的任务。

赞 (0)
分享到:更多 ()