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
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がregexpをサポートしていない場合は、grepを使用できます(Iracicotが言及):
locate node | grep /node$
locate -i node | grep -i /node$
Locateでgrepを使用できます
server2# locate node | grep node$
$記号は、grepに文字列の終わりを確認するように指示します。
すべてのディレクトリに一致する独自のglobを追加して、locate
の暗黙的なglobを無効にします。
locate */node
マニュアルページから:
PATTERN
にグロブ文字が含まれていない場合、locateはパターンが*PATTERN*
であるかのように動作します。
この構文は、ルートを含む任意の場所の完全なファイル名またはディレクトリ名と一致します。