我正在写一个小脚本,在几百个PNG文件上调用"PNGOUT"工具.我只是这样做:
find $BASEDIR -iname "*png" -exec pngout {} \;
Run Code Online (Sandbox Code Playgroud)
然后我看着我的CPU显示器,注意到只使用了一个核心,这很可悲.
在双核,四核,八核和六核(?)核心桌面的这个时代,我如何简单地将此任务与Bash并行化?(这不是我第一次有这样的需求,因为很多这些工具都是单线程的......我已经有了mp3编码器的情况).
只是在后台运行所有pngout吗?我的find命令会如何?(我不太确定如何混合查找和'&'字符)
我有三百张图片,这意味着要在三百个流程之间进行交换,这似乎不太好看!
或者我应该在"nb dirs"中复制我的三百个文件,其中"nb dirs"将是核心数,然后同时运行"nb finds"?(这会足够接近)
但是我该怎么做呢?
Noo*_*z42 22
回答我自己的问题......事实证明xargs命令的一个相对未知的特性可以用来实现它:
find . -iname "*png" -print0 | xargs -0 --max-procs=4 -n 1 pngout
Run Code Online (Sandbox Code Playgroud)
Bingo,在四核机器上即时4倍加速:)