GNU parallel
外觀
![本頁使用了標題或全文手工轉換](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
![]() | |
開發者 | GNU計劃 |
---|---|
當前版本 | |
源代碼庫 | |
編程語言 | Perl |
操作系統 | Linux和其他類Unix操作系統 |
類型 | 實用工具 |
許可協議 | GPLv3 |
網站 | www![]() |
GNU parallel是用於Linux和其他類Unix操作系統的命令行驅動的實用工具,它允許用戶並行的執行shell腳本。GNU parallel是Ole Tange用Perl寫的自由軟件。它可在GPLv3條款下獲得[4]。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核心數目。
例子
[編輯] 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而言太大的情況下不作為錯誤而停止。
參見
[編輯]![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png)
維基共享資源中相關的多媒體資源:GNU parallel
引用
[編輯]- ^ GNU Parallel 20240622 ('34 counts') released. 2024年6月24日 [2024年6月25日] (英語).
- ^ GNU Parallel 20240722 ('Assange') released [stable]. 2024年7月21日 [2024年7月30日] (英語).
- ^ Tange, Ole. GNU Parallel 20220322 ('Маріу́поль'). parallel (郵件列表). 2022-03-22 [2022-03-22]. (原始內容存檔於2022-04-04).
- ^ GNU Parallel. GNU.org. [2021-02-06]. (原始內容存檔於2021-02-01).
外部連結
[編輯]
|