FreeBSD 9: Как найти точное имя файла?

4611
Alex G

Попытка использовать 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 
8

3 ответа на вопрос

8
ADTC

If you look at locate --help, you may find:

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

You can use -r to provide a regexp pattern to locate:

locate -r /node$ 

The / ensures node is at the start of the file name. The $ ensures node is at the end of the file name. This will give you only the files matching the exact file name.

If you want to do a case-insensitive search (matches Node, NODE, nOdE, etc), add -i:

locate -i -r /node$ 

If locate does not support regexp, you can use grep (as mentioned by Iracicot):

locate node | grep /node$ locate -i node | grep -i /node$ 
В качестве альтернативы вы можете использовать ключ `-b` только для совпадения с базовым именем:` locate -br node $ ` Sarke 7 лет назад 0
6
lracicot

You may use grep with locate

server2# locate node | grep node$ 

The $ sign will tell grep to look at the end of the string.

Результат тот же. Он вызывает различные совпадения, заканчивающиеся на узле ... / usr / ports / www / p5-WebService-Linode. Я думаю, это должен быть / узел $? Alex G 12 лет назад 1
Да, вы тоже можете попробовать это (но я не уверен, нужно ли экранировать символ / или нет). Вы пытались найти -b? lracicot 12 лет назад 0
0
Roger Dahl

Отключите locateнеявный glob, добавив свой собственный glob, который соответствует всем каталогам:

locate */node 

Со страницы руководства:

Если какой-либо из них не PATTERNсодержит символы-заглушки, функция locate ведет себя так, как если бы*PATTERN*

Этот синтаксис будет соответствовать полному имени файла или каталога в любом месте, в том числе в корневом каталоге.