parallel — 平行執行多個工作

平行執行多個指令或工作,充分利用多核 CPU,效率遠高於序列執行。

語法

parallel [選項] [指令] ::: [引數...]

常用選項

選項 說明 範例
-j N 同時執行的工作數(預設 = CPU 核心數) parallel -j 4 gzip ::: *.log
::: 以命令列引數方式提供輸入 parallel echo ::: a b c
:::+ 多個輸入來源並行(而非笛卡兒積) parallel echo ::: a b :::+ 1 2
--progress 顯示進度條 parallel --progress ...
--bar 顯示進度條(帶百分比) parallel --bar ...
-k, --keep-order 保持輸出順序與輸入順序一致 parallel -k echo ::: 1 2 3
--results 目錄 將每個工作的輸出儲存到指定目錄 parallel --results outdir/ cmd ::: *
{} 替代字串(代表當前輸入項目) parallel gzip {} ::: *.log
{.} 不含副檔名的替代字串 parallel convert {}.png {.}.jpg ::: *.png

使用範例

範例 1:平行壓縮多個檔案

同時壓縮所有 .log 檔案,使用全部 CPU 核心,速度是序列壓縮的 N 倍。

$ parallel gzip ::: *.log
範例 2:平行下載多個 URL

同時下載 4 個 URL(-j 4 限制同時連線數)。

$ cat urls.txt | parallel -j 4 wget -q {}
範例 3:平行處理並顯示進度

對目錄中的每個圖片進行縮圖處理,顯示進度條。

$ parallel --bar convert {} -resize 800x600 thumb/{} ::: images/*.jpg
100% 45:0=0 ETA 00:00:00  45/45 convert...
範例 4:從標準輸入讀取並平行處理

讀取伺服器清單,平行執行 ssh 指令。

$ cat servers.txt | parallel -j 10 ssh {} "uptime"
server1:  10:30:00 up 5 days
server2:  10:30:01 up 2 days

常見錯誤與排錯

parallel: command not found
原因
GNU parallel 未安裝(xargs 是系統預裝品,parallel 需要安裝)。
解法
sudo apt install parallel(Debian/Ubuntu)。

延伸閱讀