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$

ファイル名の先頭にensuresがあります。ファイル/名の末尾にensuresがあります。これにより、node$nodeのみファイル名と完全に一致するファイル。

Node大文字と小文字を区別しない検索( 、、NODEなどに一致nOdE)を行う場合は、以下を追加します-i

locate -i -r /node$

find が正規表現をサポートしていない場合は、grep を使用できます (Iracicot で説明されているように)。

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

答え2

grepをlocateと一緒に使うこともできます

server2# locate node | grep node$

$ 記号は、grep に文字列の末尾を参照するように指示します。

答え3

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

locate */node

man ページから:

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

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

関連情報