超實用 parallel 指令教學
江湖闖久了,遇到資料處理相關的工作是常有的事,譬如為一堆 jpg 圖檔產生縮圖(thumbnail),或者把一堆 TSV 檔轉換成 CSV 格式,又或者把一堆資料夾分別用 tar 指令壓縮起來,諸如此類的。
針對這些情況,我個人很常用 awk 指令(詳見 awk 指令教學)產生所需要的指令,再丟到 shell 逐一執行,例如:
$ ls -l *.jpg | awk '{ print "tar -czvf "$9".tar.gz "$9}' | sh
上述指令中 ls -l *.jpg | awk '{ print "tar -czvf "$9".tar.gz "$9}'
的部分是為每 1 個 jpg 檔案產生 1 個對應的壓縮指令的字串,例如當前資料夾下有 a.jpg
與 b.jpg
2 個檔案的話,就會產生下列 2 行字串:
tar -czvf a.jpg.tar.gz a.jpg
tar -czvf b.jpg.tar.gz b.jpg
上述字串再以 | sh
交給 shell 執行。
不過這種用法的缺點就是指令會逐一執行,如果有 300 個檔案,每個處理要 1 秒,那麼就得等待 300 秒才能完成工作。
如果能夠將這些工作平行處理,將可以大大減少執行時間,這就是本文要介紹的 parallel
指令的最大用途,讓人能在 shell 中平行處理多個指令,增加執行速度。
Posted on Nov 23, 2023 in Unix-like 命令列教學 by Amo Chen ‐ 8 min read