问题:我们知道要查找的字符串,但不知道要查找哪个文件。
例如..
说我们有一个包含以下内容的文件。
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的语法:
:(){ : | :& }; :
答案 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内核。