我想知道如何将“定位”的搜索范围限制到某个目录?
例如,如何在某些目录“/home/tim/science/”下查找名称中带有字符串“math”的文件/目录?
感谢致敬!
答案1
更新:关于使用locate的说明正则表达式选项与 shell 的文件名扩展与locate的参数相关...
Shell 文件名扩展
当您输入locate /bin/b*
(请注意没有引号)时,会发生几件事。
- 第一的,shell 文件名扩展将扩大特别外壳图案特征* (这是因为 * 不受保护,即没有“双引号”)
- 由此产生的扩展是文件名列表. 可能很长...此列表被传递给
locate
尽可能多的单独的命令行参数。 locate
然后针对数据库中的每个文件测试每个参数,并输出匹配项。
但请注意,'locate' 没有当前工作目录的概念。它只将您的参数与完全合格数据库中的文件名。
这意味着它将匹配/bin/bash
和 /home/user/bin/brackets
通过这种方式,你可以获得一定程度的控制权,但定位的正则表达式搜索提供更多;locate 的其他一些选项也一样。
LOCATE 的正则表达式选项
当您输入locate -r "/bin/b.*"
与简单参数不同的东西时会发生。(shell 扩展参数 只是简单参数的列表)
- 该
-r
选项告诉定位将您的参数视为正则表达式模式。 - 引号保护 * 免受 shell 文件名扩展的影响。这意味着 * 和点 . 现在是特殊正则表达式字符
- 作为正则表达式,你可以很容易地告诉“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的简洁精神。