一尘不染

如何有效使用grep?

linux

我有大量要搜索的小文件。我一直在寻找一个良好的事实上的多线程版本,grep但找不到任何东西。如何改善grep的用法?截至目前,我正在这样做:

grep -R "string" >> Strings

阅读 288

收藏
2020-06-03

共1个答案

一尘不染

如果在多核处理器上安装了xargs,则可以从以下内容中受益,以防万一有人感兴趣。

环境:

Processor: Dual Quad-core 2.4GHz
Memory: 32 GB
Number of files: 584450
Total Size: ~ 35 GB

测试:

1.找到必要的文件,将它们通过管道传递到xargs,并告诉它执行8个实例。

time find ./ -name "*.ext" -print0 | xargs -0 -n1 -P8 grep -H "string" >> Strings_find8

real    3m24.358s
user    1m27.654s
sys     9m40.316s

2.找到必要的文件,将它们通过管道传递到xargs,并告诉它执行4个实例。

time find ./ -name "*.ext" -print0 | xargs -0 -n1 -P4 grep -H "string" >> Strings

real    16m3.051s
user    0m56.012s
sys     8m42.540s

3. @Stephen建议:找到必要的文件并使用+代替xargs

time find ./ -name "*.ext" -exec grep -H "string" {} \+ >> Strings

real    53m45.438s
user    0m5.829s
sys     0m40.778s

4.常规递归grep。

grep -R "string" >> Strings

real    235m12.823s
user    38m57.763s
sys     38m8.301s

就我的目的而言,第一个命令工作得很好。

2020-06-03