Unix

通過並行處理找到更好的 unix?

  • May 30, 2015

unixfind(1)實用程序非常有用,它允許我對許多符合特定規範的文件執行操作,例如

find /dump -type f -name '*.xml' -exec java -jar ProcessFile.jar {} \;

以上可能會在特定目錄中的每個 XML 文件上執行腳本或工具。

假設我的腳本/程序佔用大量 CPU 時間,並且我有 8 個處理器。一次處理多達 8 個文件會很好。

-jGNU make 允許使用標誌進行並行作業處理,但find似乎沒有這樣的功能。有沒有一種替代的通用作業調度方法來解決這個問題?

xargs帶有-P選項(程序數)。假設我想壓縮 4-cpu 機器上目錄中的所有日誌文件:

find . -name '*.log' -mtime +3 -print0 | xargs -0 -P 4 bzip2

您也可以說-n <number>每個程序的最大工作單元數。所以說我有 2500 個文件,我說:

find . -name '*.log' -mtime +3 -print0 | xargs -0 -n 500 -P 4 bzip2

這將啟動 4 個bzip2程序,每個程序有 500 個文件,然後當第一個程序完成時,另一個程序將啟動最後 500 個文件。

不知道為什麼前面的答案使用xargs and make,你有兩個並行引擎!

引用自:https://serverfault.com/questions/193319