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


10

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

を見ると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が正規表現をサポートしていない場合、grepを使用できます(Iracicotによると):

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

別の方法としては、使用することができます-bベース名に対してのみマッチへの切り替えを:locate -br node$
Sarke

6

Locateでgrepを使用できます

server2# locate node | grep node$

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


1
結果は同じです。node ... / usr / ports / www / p5-WebService-Linodeで終わるさまざまな一致を表示します。私はそれが/ node $であるべきだと思いますか?
アレックスG

はい、これも試すことができます(ただし、/文字をエスケープする必要があるかどうかはわかりません)。Locate -bを試しましたか?
lracicot

0

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

locate */node

manページから:

PATTERNグロビング文字が含まれていない場合、locateはパターンが*PATTERN*

この構文は、ルートを含め、どこでも完全なファイル名またはディレクトリ名と一致します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.