我有大量要搜索的小文件。我一直在寻找一个良好的事实上的多线程版本,grep但找不到任何东西。如何改善grep的用法?截至目前,我正在这样做:
grep
grep -R "string" >> Strings
如果在多核处理器上安装了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
就我的目的而言,第一个命令工作得很好。