在某些特定目录下使用“locate”?

在某些特定目录下使用“locate”?

我想知道如何将“定位”的搜索范围限制到某个目录?

例如,如何在某些目录“/home/tim/science/”下查找名称中带有字符串“math”的文件/目录?

感谢致敬!

答案1

更新:关于使用locate的说明正则表达式选项与 shell 的文件名扩展与locate的参数相关...

Shell 文件名扩展
当您输入locate /bin/b*(请注意没有引号)时,会发生几件事。

  1. 第一的,shell 文件名扩展将扩大特别外壳图案特征* (这是因为 * 不受保护,即没有“双引号”)
  2. 由此产生的扩展是文件名列表. 可能很长...此列表被传递给locate尽可能多的单独的命令行参数。
  3. locate然后针对数据库中的每个文件测试每个参数,并输出匹配项。

但请注意,'locate' 没有当前工作目录的概念。它只将您的参数与完全合格数据库中的文件名。
这意味着它将匹配/bin/bash /home/user/bin/brackets
通过这种方式,你可以获得一定程度的控制权,但定位的正则表达式搜索提供更多;locate 的其他一些选项也一样。

LOCATE 的正则表达式选项
当您输入locate -r "/bin/b.*"与简单参数不同的东西时会发生。(shell 扩展参数 只是简单参数的列表)

  1. -r选项告诉定位将您的参数视为正则表达式模式。
  2. 引号保护 * 免受 shell 文件名扩展的影响。这意味着 * 和点 . 现在是特殊正则表达式字符
  3. 作为正则表达式,你可以很容易地告诉“locate”以各种方式匹配其数据库条目:例如 1.locate -r "^/bin/b.*"生成以 开头的文件名/bin/b... eg2.locate -r ~/"bin/b.*"生成以以下开头的文件名/主页/用户/bin/b..请注意~/是不是受“引号”保护,因此须遵守shell 波浪号扩展将 ~/ 转换为 /home/user/

摘要:“shell filname 扩展”与“正则表达式”有很大不同

现在回到原来的帖子:


locate通常将整个数据库列出到标准输出,因此要将其限制到特定目录,您需要对其进行过滤...您可以通过locate的选项执行此操作。

您可以使用locate的正则表达式功能,而不仅仅是shell-globbing...(locate /dir/myfile* 是shell-globbing)...

信息定位-r--regex

  • “...(正则表达式)匹配针对整个路径名执行,因此默认情况下,如果路径名的任何部分与指定的正则表达式匹配,则将匹配路径名。正则表达式可以使用^或者$将匹配锚定在路径名的开头或结尾。”

注意:-i = 忽略大小写
...-r = 正则表达式
...~/ 将被 shell 扩展为 /home/user(当 ~/ 不在引号中时)
。...‘\’(反斜杠+空格;无引号)是文字空格(以避免 shell 扩展)。您可以将字符串放在引号中,但一定要保留~/引号外:~/my\ regex-/"my regex"

例如locate -ir ~/".*"la\ bella\ vita与 相同locate -ir ~/".*la bella vita",将搜索您的整个主目录以查找任何位置出现的“La Bella Vita”。

您还可以将搜索范围限制为仅文件姓名但使用-b--basename..在这种情况下正则表达式的行^首仅适用于基本名称......

我最常使用的locate -bir

PS..Locate太快了,我已经绝不用过find...也没用过 nautilus 搜索(太慢了)

使用“定位”,如果您正在寻找新添加的内容,只需运行sudo updatedb即可刷新定位的数据库......(但如果您新添加了它,您可能知道它在哪里:)....

答案2

通过 grep 管道传输,像这样

$ locate less | grep ^/bin
/bin/bzless
/bin/less
/bin/lessecho
/bin/lessfile
/bin/lesskey
/bin/lesspipe
/bin/zless

编辑:另一个答案更好,我不知道你可以通过模式来定位。

答案3

您可以使用locate /rootpath/*filenamespec。我以前没有尝试过,但它似乎有效。要执行您的示例,它将是locate /home/tim/science/*math*

您可能希望查看find命令而不是locate此类行为。语法将是find rootforsearch -name filenamepattern -print。在这种情况下,您的示例将需要find /home/tim/science -name *math* -print。没有像locate那样快,因为没有数据库要搜索...它实际上搜索文件系统。如果您打算对文件进行实际操作,那么除了print之外,您还可以使用许多其他选项。

答案4

locate --all我喜欢在 perhaps 中使用as locate -A tim science math。我认为这符合locate的简洁精神。

相关内容