查找-regex比查找速度慢 grep的

Huy*_*ens 2 regex bash grep find

我有一个脚本,使用正则表达式查找文件.代码如下:

find $dir | grep "$regex"
Run Code Online (Sandbox Code Playgroud)

脚本运行有点太慢,我想优化它.搜索需要一些时间来执行,我希望从中获得更好的性能.我试过这个尝试:

find $dir -regex ".*${regex}.*"
Run Code Online (Sandbox Code Playgroud)

由于没有创建额外的进程来解析正则表达式,因此我期待结果稍快一些.

然而结果是不同的,令我惊讶的是,命令"find | grep"比"find -regex"更快(虽然它需要更多的系统时间,正如人们所期望的那样)

我把这个行为计时了:

找到| grep结果

real   0m12.467s
user   0m2.568s
sys    0m7.260s
Run Code Online (Sandbox Code Playgroud)

找到-regex结果

real   0m16.778s
user   0m6.772s
sys    0m6.380s
Run Code Online (Sandbox Code Playgroud)

你知道为什么find -regex解决方案更慢吗?

Kev*_*vin 5

最有可能因为grep它的正则表达式引擎已经多年来高度优化,因为这是它的唯一目的("做一件事,做得好").我不知道正则表达式引擎find使用的是什么,但它显然没有那么精致grep,可能是因为它是一种不太常用的辅助功能.

此外,如果您正在使用此文件列表执行任何操作,那么您应该使用更加空白安全的方法来执行此操作.我不认为grep可以采用空分隔输入(虽然它可以输出它),所以你应该使用它,find [...] -regex [...] -print0即使它更慢.