我想optipng
使用 shell 与我的 8 线程 CPU 并行运行。
我知道程序本身没有进行多核优化,唯一的方法是用它运行 8 个文件。
我的主目录中只有 500 多个 PNG 图像,我想尽快完成这项工作。
我可能会问一个已经得到解答但没有找到的问题。
如果重要的话,我为此程序定义了一个别名:
alias optipng='optipng -o7 -zm1-9 -strip all -fix -preserve'
我希望这一点得到应用。请指教。越简单越好。如果是 POSIX,那么最好。
我承认我从未使用过xargs
or parallel
,并且我认为可以使用它们。
找到了这段代码在这里,但没有解释,因此如果适用,请详细说明。
答案1
处理 N 个文件(其中 N 约为 500)的最简单方法可能是创建一个optipng.in
N 行长的脚本,并包含一行来处理每个文件:
#!/bin/bash
for file in *.png; do
printf 'optipng -o7 -zm1-9 -strip all -fix -preserve %q\n' "$file"
done > optipng.in
检查您的optipng.in
文件以确保其正确,并对要处理的 N 个文件中的每一个发出正确的命令。一旦您确认它看起来不错,请通过以下方式运行这 N 个命令parallel
:
parallel < optipng.in
对于该大小的运行,捕获标准输出和标准错误可能是明智的,这样您就可以检查哪些文件被正常处理以及哪些文件可能触发了错误:
parallel < optipng.in > optipng.out 2>&1
进一步的改进可能涉及为每次调用 optipng 等分离 stdin/stdout 重定向。