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$

確保/位於node檔案名稱的開頭。確保$位於node檔案名稱的末尾。這會給你僅有的與確切檔案名稱相符的檔案。

如果您想要進行不區分大小寫的搜尋(符合NodeNODEnOdE等),請新增-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*

此語法將符合任何位置的完整檔案或目錄名稱,包括根目錄中的名稱。

相關內容