首页 > 解决方案 > 防止 imagemagick 两次修改图像

问题描述

所以我有一个包含很多图像的文件夹。我使用 imagemagick 来优化文件夹内的所有图像。我中止了“优化”图像的命令。现在。一些图像已经过优化,但不是全部。所以我必须再次运行该命令。有没有办法让 imagemagick 跳过已经优化的图像?

这是我通常用来优化所有图像的方法:

for i in *.jpg; do mogrify -quality 85 "$i"; done

标签: debianimagemagickmogrify

解决方案


如果您有数以万计的图像要处理,并且有一台相当现代的机器(即多核 CPU 和不错的 RAM 和磁盘),您可以考虑使用 GNU Parallel

基本上,如果文件名超过系统的 ARGMAX 限制,则需要将文件名通过管道传输到GNU Parallel 。最好使用以 null 结尾的名称,以便包含空格的文件名继续工作,因此您需要:

find . -name \*.jpg -print0 | parallel -0 --dry-run mogrify -quality 85 {}

如果看起来正确,您可以删除--dry-run并再次运行它。实际上,mogrify如果您的 CPU 有 4 个内核,这将保持 4 个副本并行运行 - 即它会使它们保持忙碌,并且应该更快地处理您的图像,但是,它不是最有效的,因为它启动了一个全新的mogrify过程每个图像,最好添加-XGNU Parallel,然后它将mogrify以您的操作系统可以处理的尽可能多的文件名开始,并且启动一个进程的成本将分摊到大量图像上。那将是:

find . -name \*.jpg -print0 | parallel -0 -X mogrify -quality 85 {}

在您的数据副本上体验任何新软件- GNU Parallel可以非常快速地做很多事情 - 好东西和坏东西!


推荐阅读