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


10

尝试使用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

Answers:


10

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

  -r, --regexp REGEXP    search for basic regexp REGEXP instead of patterns
      --regex            patterns are extended regexps

您可以-r用来提供regexp模式locate

locate -r /node$

/保证node是在文件名的开头。该$保证node是在文件名末尾。这会给你匹配确切的文件名的文件。

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

locate -i -r /node$

如果locate不支持regexp,则可以使用grep(如Iracicot所述):

locate node | grep /node$
locate -i node | grep -i /node$

或者,您可以使用-b开关仅与基本名称匹配:locate -br node$
Sarke

6

您可以在定位中使用grep

server2# locate node | grep node$

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


1
结果是一样的。它显示了以node ... / usr / ports / www / p5-WebService-Linode结尾的各种匹配项。我猜应该是/ node $吗?
Alex G

是的,您也可以尝试此操作(但是我不确定是否必须对/字符进行转义)。您是否尝试过定位-b?
lracicot 2012年

0

locate通过添加与所有目录匹配的自己的glob来禁用的隐式glob:

locate */node

从手册页:

如果PATTERN有任何字符不包含,则定位的行为就像该模式是*PATTERN*

此语法将在任何位置(包括根目录)都匹配完整的文件或目录名称。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.