2017-10-06 35 views
-2

問題:我們知道字符串尋找,但不知道找哪個文件如何在所有可用內核中使用grep?

例如..

說,我們有一個包含以下內容的文件。

blah blah blah
.... IMPORTANT NOTE: very important note ..... blah blah blah blah

我們不知道文件名(有可能是用同樣的「重要提示」標籤的多個文件),我們想找到所有包含一個「重要提示」

文件

 

一個解決辦法:

 find /directory/to/search/ -exec grep "IMPORTANT NOTE" {} /dev/null \;

我會將它用於腳本,因爲我可以捕獲文件名並使用它進行操作。

另一種解決方案:

 grep -R "IMPORTANT NOTE" /directory/to/search/*

我會用這個來手動查找文件..

 據我瞭解,在一個過程中,上述運行,並使用一個單一的核心。這可以修改爲執行每個文件搜索 作爲一個單獨的任務,以利用機器上所有可用的核心? (有點像甲骨文1)我知道你可以使用&在後臺執行命令,這可以用嗎?如果是這樣,我如何確保父shell在命令的輸出上保持句柄?

1)fork bomb - 易拒絕服務「攻擊」

重要提示:這將徹底鎖定您的計算機。 (嘗試一下在你不關心虛擬機)

語法叉炸彈:

 :(){ : | :& }; :

+1

你爲什麼要使用所有的核心? –

+0

我只想看看是否可以通過使用所有處理能力使其運行速度更快。 – hov

+1

在2-3個實例之後,它會變成內存綁定的,並且可能會更早地綁定磁盤,除非你有一個非常大的系統。 – Surt

回答

0

你可以做類似

grep -R "IMPORTANT NOTE" /directory/to/search/[a-m]* & 
grep -R "IMPORTANT NOTE" /directory/to/search/[n-z]* & 

注意到這並不能掩蓋所有文件。

0

使用xargs -P可讓您控制同時運行多少個實例,每當別人死亡時啓動新實例。

find /directory/to/search/ -print0 \ 
| xargs -P 8 grep -n 1 -e "IMPORTANT NOTE" /dev/null 

這就是說 - 一般來說,這將是I/O而不是CPU綁定;你應該擔心最大化你的磁盤帶寬,而不是你的CPU核心。

相關問題