热门问题
时间线
聊天
视角
GNU parallel
用於在本機或遠端機器上並行執行工作的殼層工具 来自维基百科,自由的百科全书
Remove ads
GNU parallel是用於Linux和其他類Unix作業系統的命令列驅動的實用工具,它允許用戶並列的執行shell指令碼。GNU parallel是Ole Tange用Perl寫的自由軟件。它可在GPLv3條款下獲得[2]。GNU parallel可以在遠端伺服器上執行作業,它使用ssh與遠端機器進行通訊。
用法
最常用的用法是替代shell循環,比如將
for x in $(cat list); do
do_something "$x"
done | process_output
變為如下形式:
cat list | parallel do_something | process_output
這裏的檔案list
包含給do_something
的實際參數,而這裏的| process_output
可以省略。
使用parallel的指令碼通常比使用pexec的指令碼易讀。
程式parallel的特徵還有:
- 聚組標準輸出和標準錯誤輸出,parallel延期輸出直到所有執行作業完成;
- 可保持輸出的次序同於輸入的次序;
- 恰當的處理包含特殊字元的檔名,比如空格、單引號、雙引號、&(ampersand)和UTF-8編碼字元;
作為預設,parallel並列執行作業的數量同於CPU核心數目。
Remove ads
例子
find . -name "*.foo" | parallel grep bar
上述命令是如下命令的並列等價:
find . -name "*.foo" -exec grep bar {} +
它在當前目錄及其子目錄中的名字結束於.foo
的所有檔案中尋找字串bar
的出現。parallel將如期執行除非遇到名字包含換行的檔案。為了避免這個限制可以使用:
find . -name "*.foo" -print0 | parallel -0 grep bar
上述命令使用空字元來分隔檔名。
find . -name "*.foo" | parallel -X mv {} /tmp/trash
上述命令使用{}
來告知parallel
將{}
替代為實際參數列。
find . -maxdepth 1 -type f -name "*.ogg" | parallel -X -r cp -v -p {} /home/media
上述命令所做同於:
cp -v -p *.ogg /home/media
但是,使用find
/parallel
/cp
的前者命令更加有效利用資源,並且在*.ogg展開後對於shell而言太大的情況下不作為錯誤而停止。
Remove ads
參見

維基共享資源中相關的多媒體資源:GNU parallel
參照
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads