嘗試使用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
透過新增您自己的與所有目錄相符的 glob來停用locate
的隱式 glob:
locate */node
從手冊頁:
如果任何
PATTERN
不包含通配符,則locate的行為就像該模式是*PATTERN*
此語法將符合任何位置的完整檔案或目錄名稱,包括根目錄中的名稱。