用于搜索的简单 CLI 工具

用于搜索的简单 CLI 工具

有类似的 CLI 工具吗gnome-search-tool?我正在使用locate,但我更喜欢它对目录名称匹配的结果进行分组。我得到很多路径匹配的结果,这不是我想要的:

/tmp/dir_match/xyz
/tmp/dir_match/xyz2/xyz3

它需要足够快,因此需要使用搜索索引。

答案1

弗兹夫是一个通用的命令行模糊查找器。

他们的 github 页面是https://github.com/junegunn/fzf

答案2

标准 Linux 命令是:

  • find命令查找文件名,例如:

    • 查找名为 xyz 的文件/tmp

      $ find /tmp -type f -name xyz
      
    • 查找名称包含“xyz”的目录/tmp

      $ find /tmp -type d -name '*xyz*'
      
  • find 和 grep 命令用于搜索文件内容,例如:

    • 查找/tmp包含 xyz 的文件

      $ find /tmp -type f -exec grep -l xyz {} \;
      

答案3

locate非常通用,可以采用 -r 和正则表达式模式,因此您可以进行许多复杂的匹配。例如,要匹配目录a a0 a1等,请使用'/a[0-9]*/'.这只会显示其中包含文件的目录,因为您需要/路径中的第二个目录。要单独匹配目录,请使用$将模式锚定到路径的末尾,'/a[0-9]*$'.

请注意,至少有 2 个版本locate,其中一个来自GNU,以及 Redhat 的一个(称为 mlocate)。用于--version查找您拥有的。它们的正则表达式风格略有不同。例如,如果我们将上述模式更改'/a[0-9]*$'为 use+而不是*避免a自行匹配,则 mlocate 需要\+而 gnu just +

例如,要匹配目录a及其下的所有内容,您可以对两个版本都使用

locate -r '/a\(/\|$\)'

对于 mlocate,您可以--regex使用扩展语法作为前缀

locate --regex '/a(/|$)'

--regextype egrep例如,要对 gnulocate 执行相同的操作,您需要添加 option 。

相关内容