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

FreeBSD 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

решение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*

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

Связанный контент