我经常发现自己写一个简单的for循环来进行操作的许多文件,例如:易于并行化
for i in `find . | grep ".xml$"`; do bzip2 $i; done
这似乎有点令人沮丧,我的4核机器上只有一个核心的习惯。有没有一种简单的方法可以将并行性添加到我的shell脚本中?
编辑:为了引进更多的情况下,以我的问题,对不起,我是不是更清晰下手!
我经常要运行简单的(ISH)脚本,例如图的曲线图,压缩或解压缩,或者在合理规模的数据集运行一些程序,(通常是100和10000之间)。我用来解决这些问题的脚本看起来像上面的脚本,但可能有不同的命令,甚至是一系列要执行的命令。
例如,刚才我运行:
for i in `find . | grep ".xml.bz2$"`; do find_graph -build_graph $i.graph $i; done
所以我的问题是不以任何方式的bZIP具体! (虽然并行bzip看起来很酷,但我打算将来使用它)。
只是一个说明,但你可以使用xargs不必写这样一个循环: 找到。 | grep“.xml.bz2 $”| xargs -n1 bzip2 (-n1表示只传递每个bzip 1参数,默认情况下xargs将所有参数传递给一个进程)。不幸的是,xargs连续进行每个过程。 – 2008-11-11 20:29:34
你应该做`find。 -name \ *。xml.bz2`而不是`find。 | grep“.xml.bz2 $”` - 这正是发现的目的! (另外,你的regex会匹配foozxmlzbz这样的文件名,但这是一个不同而又不重要的问题)。 – 2008-11-11 20:42:58
等待Evan,xargs对于我来说有一个标记为“-P”的参数,对于进程数量! So: 找不到。 | grep“.xml.bz2 $”| xargs -n1 -P3 bzip2 做我想要的 xargs有多长时间? – 2008-11-11 21:50:59