当前位置:  开发笔记 > 编程语言 > 正文

在bash中进行并行处理?

如何解决《在bash中进行并行处理?》经验,为你挑选了2个好方法。

我有成千上万的png文件,我喜欢用它来缩小pngcrush.我的find .. -exec工作很简单,但这是顺序的.我的机器有相当多的资源,我会并行完成.

每个png要执行的操作是:

pngcrush input output && mv output input

理想情况下,我可以指定最大并行操作数.

有没有办法用bash和/或其他shell助手做到这一点?我是Ubuntu或Debian.



1> Bart Sas..:

您可以使用xargs并行运行多个进程:

find /path -print0 | xargs -0 -n 1 -P  sh -c 'pngcrush $1 temp.$$ && mv temp.$$ $1' sh

xargs将读取由find生成的文件列表(由0个字符(-0)分隔)并一次运行sh -c '...' sh带有一个参数的提供的命令(-n 1).xargs将并行运行(-P ).



2> tokland..:

您可以使用自定义find/xargs解决方案(请参阅Bart Sas的回答),但是当事情变得更加复杂时,您至少有两个强大的选择:

    parallel(来自包moreutils)

    GNU并行


我强烈建议在moreutils版本上使用GNU并行.它更灵活.
find/path -print0 | parallel -0 pngcrush {} {.}.temp'&&'mv {.}.temp {}
Deb和RPM包:https://build.opensuse.org/package/show?package = parallel&project = home%3Atange
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有