我有一個由數百個目錄組成的數值模擬結果;每個目錄包含數百萬個文本檔案。
我需要wavelength;用“ wavelength_bc;”替換字串“ ”,所以我嘗試了以下兩種方法:
find . -type f -exec sed -i 's/wavelength;/wavelength_bc;/g' {} \;
和
find . -type f -exec sed -i 's/wavelength;/wavelength_bc;/g' {}
不幸的是,上面的命令需要很長時間才能完成(超過 1 小時)。
我想知道如何利用機器上的內核數量 (8) 來加速上述命令?
我想到的是使用xargs具有-P標志。我擔心這會損壞檔案;所以我不知道這是否安全?
總之:
sed使用 with 時如何加速替換find?- 使用
xargs -P并行運行是否安全?
謝謝
uj5u.com熱心網友回復:
xargs -P應該可以安全使用,但是您需要使用-print0選項find和管道xargs -0來處理帶有空格或通配符的檔案名:
find . -type f -print0 |
xargs -0 -I {} -P 0 sed -i 's/wavelength;/wavelength_bc;/g' {}
-P 0選項xargs將在并行模式下運行。它將為您的 CPU 運行盡可能多的行程。
uj5u.com熱心網友回復:
這可能對您有用(GNU sed 和并行):
find . -type f | parallel sed -i 's/wavelength;/wavelength_bc;/g' {}
GNU parallel 將運行與機器上并行內核數一樣多的作業。
更復雜的應用可以包括遠程服務器和檔案傳輸看到這里和的cheatsheet這里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/321759.html
上一篇:如何洗掉子檔案夾(小于5kb)中的所有檔案(大于5分鐘)
下一篇:為什么這個變數沒有被優化掉
