我經常發現自己寫一個簡單的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