Locate

當目錄包含名稱時定位停止重複

  • August 14, 2018

有時在使用定位時,我的搜尋字元串會(偶然或有意地)匹配目錄的一部分。這會導致列印目錄中該點以下的所有內容。例如:

$ locate lib
/home/myname/libImWorkingOn/libImWorkingOn.so
/lib/
/lib/modules/
/lib/firmware/
.... etc

這很快就會失控,並且很難搜尋。

有沒有辦法防止這種情況?例如,讓它列印:

$locate lib
/home/myname/libImWorkingOn/libImWorkingOn.so
/lib/

僅此而已?

此外,是否可以查找目錄並讓 locate 只提取目錄?

例如(尋找 qemu 基本文件夾)

實際的:

$locate qemu
home/myname/qemu
home/myname/qemu/.svn
home/myname/qemu/.svn/.....
home/myname/qemu/Makefile
.....
usr/bin/qemu
.....

期望:

$locate (option) qemu
/home/myname/qemu
/usr/bin/qemu

mlocate版本為 的系統上,您可以使用or選項locate限制匹配:-b``--basename

locate -b lib

…這會將結果限制為名稱包含字元串的文件。在我的系統上,這會導致更少的匹配:

$ locate lib | wc -l
28901
$ locate -b lib | wc -l
3430

**locate列印絕對路徑名列表。您始終可以通過管道獲取結果grep**以獲取文件名

locate lib |grep -E '/lib$'

或者只是目錄名稱

locate lib |grep '/lib/' | sed -e 's,/lib/.*$,/lib,' | sort -u

如果您經常這樣做,您可以編寫一個小腳本來完成其中的每一個(當然,參數化“lib”)。

引用自:https://unix.stackexchange.com/questions/462573