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

3 ответа3

8

Если вы посмотрите на 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 не поддерживает регулярные выражения, вы можете использовать grep (как упомянуто Iracicot):

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

Вы можете использовать grep с locate

server2# locate node | grep node$

Знак $ скажет grep посмотреть конец строки.

0

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

locate */node

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .