我有一个使用正则表达式查找文件的脚本。代码如下:
find $dir | grep "$regex"脚本运行得有点慢,我想对其进行优化。搜索需要一些时间来执行,我希望从中获得更好的性能。我尝试过这样的尝试:
find $dir -regex ".*${regex}.*"我期望得到稍微快一点的结果,因为不会创建额外的进程来解析正则表达式。
然而,结果是不同的,令我惊讶的是,命令"find | grep“比"find -regex”更快(尽管它需要更多的系统时间,正如人们所预期的那样)
我对此行为进行了计时:
Find | grep结果
real 0m12.467s
user 0m2.568s
sys 0m7.260s查找-regex结果
real 0m16.778s
user 0m6.772s
sys 0m6.380s你知道为什么find -regex解决方案比较慢吗?
发布于 2012-05-03 23:41:42
很可能是因为grep和它的正则表达式引擎经过了多年的高度优化,因为这是它唯一的目的(“做一件事,做好它”)。我不知道find使用的正则表达式引擎是什么,但它显然没有grep的那么精致,可能是因为它是一个较少使用的次要特性。
此外,如果您要对此文件列表执行任何操作,您实际上应该使用一种更安全的空格方式。我认为grep不能接受空分隔符的输入(尽管它可以输出它),所以您应该使用find [...] -regex [...] -print0,尽管它比较慢。
https://stackoverflow.com/questions/10431331
复制相似问题