web-dev-qa-db-ja.com

FreeBSD 9:正確なファイル名を見つける方法は?

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
10
Alex G

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がファイル名の最後にあることを確認します。これにより、のみ正確なファイル名に一致するファイルが得られます。

大文字と小文字を区別しない検索(NodeNODEnOdEなどに一致)を実行する場合は、-iを追加します。

locate -i -r /node$

Locateがregexpをサポートしていない場合は、grepを使用できます(Iracicotが言及):

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

Locateでgrepを使用できます

server2# locate node | grep node$

$記号は、grepに文字列の終わりを確認するように指示します。

6
lracicot

すべてのディレクトリに一致する独自のglobを追加して、locateの暗黙的なglobを無効にします。

locate */node

マニュアルページから:

PATTERNにグロブ文字が含まれていない場合、locateはパターンが*PATTERN*であるかのように動作します。

この構文は、ルートを含む任意の場所の完全なファイル名またはディレクトリ名と一致します。

0
Roger Dahl