FreeBSD 9:如何定位准确的文件名?

Ale*_*x G 10 unix freebsd locate

尝试使用locate命令来查找给定模式的完全匹配项。但是结果显示所有匹配的文件..

例如:我想找到一个名为:node的二进制文件

但它给了我包含这个词的所有匹配项:

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
Run Code Online (Sandbox Code Playgroud)

ADT*_*DTC 10

如果您查看locate --help,您可能会发现:

  -r, --regexp REGEXP    search for basic regexp REGEXP instead of patterns
      --regex            patterns are extended regexps
Run Code Online (Sandbox Code Playgroud)

您可以使用-rregexp 模式提供给locate

locate -r /node$
Run Code Online (Sandbox Code Playgroud)

/保证node是在文件名的开头。该$保证node是在文件名末尾。这将为您提供与确切文件名匹配的文件。

如果你想要做一个区分大小写的搜索(火柴NodeNODEnOdE,等),添加-i

locate -i -r /node$
Run Code Online (Sandbox Code Playgroud)

如果 locate 不支持正则表达式,您可以使用 grep(如 Iracicot 所述):

locate node | grep /node$
locate -i node | grep -i /node$
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以将 grep 与 locate 一起使用

server2# locate node | grep node$
Run Code Online (Sandbox Code Playgroud)

$ 符号将告诉 grep 查看字符串的末尾。