linux - 使用多个 CPU 内核优化目录中的图像

标签 linux image bash terminal do-while

我在一个目录中有几个 PNG 图像,我正在使用 optipng 来优化和减小图像大小。问题是优化所有文件花费的时间太长。

我有一个四核处理器,我注意到 optipng 只使用了一个单核 当我优化目录时。

这是我正在使用的代码:

ls -1 | while read line
do 
    optipng -o7 "$line"
done

是否可以在读取目录的同时对四个不同的文件并行执行optipng

最佳答案

还有另一种解决方案涉及xargs

find some/dir/ -iname '*.png' -print0 | xargs -0 -n 1 -P 4 optipng -o7

-P 4 启动 4 个并行进程,-n 1 每个进程最多使用一个文件名。

或者,如果您有换行符分隔的文件名,请使用:

find some/dir/ -iname '*.png' | sort | xargs -d \\n -n 1 -P 4 optipng -o7

感谢Joe Lencioni comment on a blog .


更新:我写了一个 shell 脚本来调用 zopflipng (它提供比 optipng 更高的压缩率)并行处理多个图像:zopflipng_in_place

关于linux - 使用多个 CPU 内核优化目录中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21801085/

相关文章:

java - 在Java中更改png的非透明部分的颜色

linux - 为什么循环会死掉?

bash - 使用 tr 将一个字符替换为多个字符

php - 将 .jpg、.jpeg 或 .gif 转换为 .png 而不将它们保存在机器上

c++ - fstream类成员变量

linux - 用于在远程 SFTP 服务器上移动文件的 Shell 脚本

linux - 在 Jenkins 中使用 AWS 命令​​行 SSH 连接到 Linux 客户端

java - Douglas–Peucker 简化边

linux - Grep 并打印一个模式并打印前面的字符串/模式

linux - GNU Parallel - 将输出重定向到具有特定名称的文件