尝试使用locate
命令查找给定模式的精确匹配。但是结果显示所有匹配的文件。
例如:我想查找一个名为的二进制文件:节点
但它给了我所有包含这个词的匹配项:
server2# locate node
/usr/share/man/man9/getnewvnode.9.gz
/usr/share/man/man9/ieee80211_amrr_node_init.9.gz
/usr/share/man/man9/ieee80211_dump_node.9.gz
/usr/share/man/man9/ieee80211_dump_nodes.9.gz
/usr/share/man/man9/ieee80211_find_rxnode.9.gz
/usr/share/man/man9/ieee80211_find_rxnode_withkey.9.gz
/usr/share/man/man9/ieee80211_free_node.9.gz
答案1
如果你看一下locate --help
,你可能会发现:
-r, --regexp REGEXP search for basic regexp REGEXP instead of patterns
--regex patterns are extended regexps
您可以使用-r
提供正则表达式模式来locate
:
locate -r /node$
确保位于文件名的开头。确保位于文件名的结尾。这将为您/
提供node
$
node
仅有的与精确文件名匹配的文件。
如果您想进行不区分大小写的搜索(匹配Node
,,NODE
等nOdE
),请添加-i
:
locate -i -r /node$
如果locate不支持regexp,您可以使用grep(如Iracicot所述):
locate node | grep /node$
locate -i node | grep -i /node$
答案2
您可以使用 grep 和locate
server2# locate node | grep node$
$ 符号将告诉 grep 查看字符串的末尾。
答案3
locate
通过添加自己的与所有目录匹配的 glob来禁用的隐式 glob:
locate */node
从手册页中:
如果任何内容
PATTERN
不包含通配符,则定位的行为就像模式是*PATTERN*
此语法将匹配任何地方的完整文件或目录名称,包括根目录中。