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

时间:2017-10-06 00:10:56

标签: linux bash optimization grep find

问题:我们知道要查找的字符串,但不知道要查找哪个文件。

例如..

说我们有一个包含以下内容的文件。

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 - 容易拒绝服务“攻击”

重要说明:这将完全锁定您的机器。 (在你不关心的虚拟机中试试)

fork bomb的语法:

 :(){ : | :& }; : 

2 个答案:

答案 0 :(得分:0)

您可以执行类似

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

请注意,这并不涵盖所有文件。

答案 1 :(得分:0)

使用xargs -P可以控制并发运行的实例数,并在其他实例死亡时启动新实例。

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

那说 - 一般来说,这将是I / O而不是CPU限制;您应该担心最大化磁盘带宽,而不是CPU内核。