Image 如果图像已优化,请查找图像

Image 如果图像已优化,请查找图像,image,optimization,Image,Optimization,我想知道是否有任何方法可以跳过文件,如果它已经优化 我正在使用以下命令运行PNG图像的优化: find '*.png' -print0 | xargs optipng -nc -nb -o5 -quiet -preserve -dir ~/images/output -log ~/optpng.log 由于映像目录有数千个映像,因此处理该映像需要很长时间 请给我建议一个解决方案 如果您有一台多核机器,请考虑并行执行这些操作(例如与-p4并行执行4次),并且不要为每个文件调用新进程(例如,每

我想知道是否有任何方法可以跳过文件,如果它已经优化

我正在使用以下命令运行PNG图像的优化:

find '*.png' -print0 | xargs optipng  -nc -nb -o5 -quiet -preserve  -dir ~/images/output -log ~/optpng.log
由于映像目录有数千个映像,因此处理该映像需要很长时间


请给我建议一个解决方案

如果您有一台多核机器,请考虑并行执行这些操作(例如与
-p4
并行执行4次),并且不要为每个文件调用新进程(例如,每个
optipng
进程执行8个图像):

find ... | xargs -n 8 -P 4 optipng ...
或者,您可以使用GNU并行

find -name "*png" -type f |while read FILE do echo $FILE BASEFILE=$(basename $FILE) optipng $FILE > /tmp/$$.out TEST=$(cat /tmp/$$.out |grep "optimized" |wc -l) if [ $TEST -gt 0 ] then echo "$BASEFILE is already optimized" else echo "$BASEFILE NOT is already optimized" cp $BASEFILE ~/destination_dir fi done 查找-名称“*png”-读取文件时键入f | 做 echo$文件 BASEFILE=$(basename$文件) optpng$FILE>/tmp/$$.out 测试=$(cat/tmp/$$.out | grep“优化”| wc-l) 如果[$TEST-gt 0] 然后 echo“$BASEFILE已优化” 其他的 echo“$BASEFILE尚未优化” cp$BASEFILE~/destination\u dir fi 完成
您可以指定某种大小与分辨率的比率。因此,对于每个图像,您可以检查其大小和分辨率,并决定是否需要优化此图像。但我的图像目录具有不同大小的图像,如面包屑、边框、背景等。抱歉,我不能使用mtime,我希望将其配置为jenkins Job的一部分抱歉,我根本不了解jenkins。也许一种选择是在优化每张图像时,使用
jhead
ImageMagick
在图像的“注释”部分添加一个小注释,然后在再次优化之前检查注释。或者记录所有优化图像的MD5校验和。感谢您的宝贵回复,顺便说一句,我已经找到了如何处理已优化图像的方法