我有成千上万的png文件,我喜欢用它来缩小pngcrush
.我的find .. -exec
工作很简单,但这是顺序的.我的机器有相当多的资源,我会并行完成.
每个png要执行的操作是:
pngcrush input output && mv output input
理想情况下,我可以指定最大并行操作数.
有没有办法用bash和/或其他shell助手做到这一点?我是Ubuntu或Debian.
您可以使用xargs
并行运行多个进程:
find /path -print0 | xargs -0 -n 1 -Psh -c 'pngcrush $1 temp.$$ && mv temp.$$ $1' sh
xargs
将读取由find生成的文件列表(由0个字符(-0
)分隔)并一次运行sh -c '...' sh
带有一个参数的提供的命令(-n 1
).xargs将并行运行
(-P
).
您可以使用自定义find/xargs
解决方案(请参阅Bart Sas的回答),但是当事情变得更加复杂时,您至少有两个强大的选择:
parallel
(来自包moreutils)
GNU并行