【问题标题】:Fast search for text in files in a directory in unix?快速搜索unix目录中文件中的文本?
【发布时间】:2011-01-31 19:54:48
【问题描述】:

有没有很好的解决方案来执行类似于

的搜索
find . -name "*.*" | xargs grep "some text"

但由于离线索引,搜索速度更快。对通配符或轻型正则表达式的支持会很好,但即使是由于离线预处理而可以运行得非常快的原始文本搜索也会很棒。

【问题讨论】:

标签: unix full-text-search


【解决方案1】:

我认为这是一个很棒且快速的选择

grep -rl "string" /path

【讨论】:

    【解决方案2】:

    这对于您的目的来说可能是多余的,但Beagle 允许您对本地文件执行非常快速的搜索。它通常作为桌面应用程序销售,但实际上它只是一个可以使用beagle-query 响应来自命令行的请求的守护进程。

    【讨论】:

      【解决方案3】:

      Recoll 有一个不错的本地文件索引机制,但它带有一个 GUI。

      【讨论】:

        【解决方案4】:

        grep -Ri --include="*.xml" TEXT /目录/

        • 这会在特定目录中的所有 xml 文件中搜索“TEXT”文本,但可能没有您预期的那么快

        【讨论】:

          【解决方案5】:

          Python

          from __future__ import print_function
          import glob
          for name in glob.glob('*.*'):
              with open(name,'r') as aFile:
                  for n, text in enumerate(aFile):
                      if 'some text' in text:
                          print( name, n, text )
          

          re 模块中有一个非常完整的正则表达式库。

          您可以创建shelve 数据库或其他一些索引结构,而不是打印结果。

          【讨论】:

          • 这不会比grep 快​​(事实上,它可能要慢得多)。 OP 正在寻找预先计算索引的东西,这样查找就不必在搜索时实际读取数据。
          • @Adrian Petrescu:你测量过吗?这非常快。
          • 它仍然需要加载和读取每个文件,因此即使匹配正则表达式花费了 0 时间,也存在下限。预先计算的索引根本不涉及打开您正在搜索的文件,我认为这就是他的意思。
          • 这应该用于“预计算”索引。
          猜你喜欢
          • 2011-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-26
          • 1970-01-01
          • 2014-10-14
          • 2012-03-17
          相关资源
          最近更新 更多