簡體   English   中英

如何在所有可用內核中使用 grep?

[英]How can I use grep with all available cores?

問題:我們知道要查找的字符串,但不知道要查找的文件。

例如..

假設我們有一個包含以下內容的文件。

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

我們不知道文件名(可能有多個文件具有相同的“IMPORTANT NOTE”標簽),我們想找到所有包含“IMPORTANT NOTE”的文件

一種解決方案:

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

我會用它來編寫腳本,因為我可以捕獲文件名並用它做一些事情。

另一個解決方案:

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

我會用它來手動查找文件..

據我了解,以上運行在一個進程上並使用一個內核。 是否可以修改它以將每個文件搜索作為單獨的任務執行以利用機器上的所有可用內核? (有點像 forkbomb 1)我知道您可以使用 & 在后台執行命令,這可以使用嗎? 如果是這樣,我如何確保父 shell 保留命令輸出的句柄?

1) 叉炸彈——簡單的拒絕服務“攻擊”

重要提示:這將完全鎖定您的機器。 (在你不關心的虛擬機中試一試)

叉炸彈的語法:

:(){ : | :& }; :

你可以做類似的事情

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

請注意,這並不涵蓋所有文件。

使用xargs -P可讓您控制同時運行的實例數量,並在其他實例死亡時啟動新實例。

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

也就是說——一般來說,這將是 I/O 而不是 CPU 密集型; 您應該擔心最大化您的磁盤帶寬,而不是您的 CPU 內核。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM