Попытка использовать 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
, NODE
, nOdE
, и т.д.), добавьте -i
:
locate -i -r /node$
Если locate не поддерживает регулярные выражения, вы можете использовать grep (как упоминал Iracicot):
locate node | grep /node$
locate -i node | grep -i /node$
решение2
Вы можете использовать grep с locate
server2# locate node | grep node$
Знак $ сообщит grep, что нужно искать конец строки.
решение3
Отключите locate
неявный глоб, добавив свой собственный глоб, соответствующий всем каталогам:
locate */node
Из страницы руководства:
Если какой-либо из них
PATTERN
не содержит символов подстановки, locate ведет себя так, как если бы шаблон был*PATTERN*
Этот синтаксис будет соответствовать полному имени файла или каталога в любом месте, включая корень.