<code>alias cd='rm -rf'</code>
首頁君注:顯然這個答案是開個玩笑,可别真的去試啊,否則你一定會感覺到世界都錯亂了呢。不過,下面才是好戲,請看:
===============我是嚴肅的分割線==================
如果從生産力的角度來說,我覺得xargs是見過的最牛逼的指令行工具。 舉個栗子。比如要把該檔案夾下的所有jpg檔案轉成png格式,普通青年可以用for循環 (代碼未測試)
<code>for fn in *.jpg; do convert "$fn" `echo $fn | sed 's/jpg$/png/'`; done</code>
文藝青年會用xargs來寫,類似 (代碼未測試):
<code>ls *.jpg | xargs -i{} convert "{}" `echo {} | sed 's/jpg$/png/'`</code>
好像沒什麼差別?
現在你的電腦有8個核,想要同時轉換格式。咋整?for或者一般的shell就傻逼了,難道要用python/multiprocessing甚至開c++/openmp寫段小程式?no no no no no(印度口音)。xargs有個逆天的參數-p:
<code>ls *.jpg | xargs -i{} -p 8 convert "{}" `echo {} | sed 's/jpg$/png/'`</code>
執行的效果是,電腦會自動讀前8個檔案進來,轉換格式。這8個程序裡任何一個執行結束後,會自動讀取下一個檔案,保證始終有8個程序在執行,直到所有任務執行完畢。作為一個科研狗,這簡直是各種并行處理的大殺器。
===============放福利的分割線==================
如果有多台機器怎麼辦呢?xargs可以在多台機器上自動并行嗎?
<code>ls *.jpg | parallel -i{} -s 32/m{1..4} convert "{}" `echo {} | sed 's/jpg$/png/'`</code>
這個的意思是在名字是m1, m2, m3和m4的4台機器上并行處理,每個機器跑32個程序。這樣parallel就會自動監視每個機器的運作情況,誰家cpu負載低了就自動配置設定給它其他任務,保證吞吐量。(當然parallel還沒有智能到自動傳輸資料的程度,但這個可以用nfs等輕松解決)
效果?

aws上面隻要1美元一小時,用我的腳本5分鐘輕松搞出來128核cluster這種事我會到處亂說?!
原文釋出時間:2015-04-06
本文來自雲栖合作夥伴“linux中國”