【问题标题】:Find -regex is slower than find | grepFind -regex 比 find | 慢grep
【发布时间】:2012-05-12 23:09:56
【问题描述】:

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

find $dir | grep "$regex"

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

find $dir -regex ".*${regex}.*"

我期待更快的结果,因为没有创建额外的过程来解析正则表达式。

但是结果不同,令我惊讶的是,命令“find | grep”比“find -regex”更快(尽管它需要更多的系统时间,正如人们所预料的那样)

我已经计时了这个行为:

查找 | grep 结果

real   0m12.467s
user   0m2.568s
sys    0m7.260s

查找-regex结果

real   0m16.778s
user   0m6.772s
sys    0m6.380s

您知道为什么 find -regex 解决方案较慢吗?

【问题讨论】:

    标签: regex bash find grep


    【解决方案1】:

    很可能是因为grep 及其正则表达式引擎多年来一直在高度优化,因为这是它的唯一目的(“做一件事并做好”)。我不知道find 使用什么正则表达式引擎,但它显然不如grep 的那么精细,可能是因为它是一个不太常用的辅助功能。

    另外,如果您对这个文件列表做任何事情,您应该真正使用一种更安全的空白方式来执行此操作。我不认为grep 可以接受以null 分隔的输入(尽管它可以输出),所以即使它更慢,你也应该使用find [...] -regex [...] -print0。

    【讨论】:

    • 感谢您的提示。在这个用例中,我不需要 -print0,但它是我经常使用的开关。我在 Ruby 中得到了 find 的结果,我用“\n”分割了字符串,因此除非名称中有 \n,否则我应该没问题。
    猜你喜欢
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多