GNU parallel

維基百科,自由的百科全書
跳至導覽 跳至搜尋
Parallel
File:Gnu-parallel.svg
開發者GNU計劃
當前版本20220322[1](2022年3月22日,​4年前​(2022-03-22
源代碼庫
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
編程語言Perl
引擎
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    操作系統Linux和其他類Unix操作系統
    類型實用工具
    許可協議GPLv3

    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核心數目。

    例子[編輯]

     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而言太大的情況下不作為錯誤而停止。

    參見[編輯]

    引用[編輯]

    1. ^ Tange, Ole. GNU Parallel 20220322 ('Маріу́поль'). parallel (郵件列表). 2022-03-22 [2022-03-22]. (原始內容存檔於2022-04-04). 
    2. ^ GNU Parallel. GNU.org. [2021-02-06]. (原始內容存檔於2021-02-01). 

    外部連結[編輯]