FreeBSD 9:如何找到确切的文件名?

FreeBSD 9:如何找到确切的文件名?

尝试使用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,,NODEnOdE),请添加-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*

此语法将匹配任何地方的完整文件或目录名称,包括根目录中。

相关内容