有时,当使用locate时,我的搜索字符串会(无意或有意)匹配目录的一部分。这会导致打印目录中该点以下的所有内容。例如:
$ 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
答案1
mlocate
在版本为 的系统上,您可以使用或选项locate
限制匹配:-b
--basename
locate -b lib
...这会将结果限制为名称包含该字符串的文件。在我的系统上,这会导致匹配次数减少很多:
$ locate lib | wc -l
28901
$ locate -b lib | wc -l
3430
答案2
locate
打印绝对路径名列表。你可以总是将结果通过管道传输grep
仅获取文件名
locate lib |grep -E '/lib$'
或者只是目录名称
locate lib |grep '/lib/' | sed -e 's,/lib/.*$,/lib,' | sort -u
如果您经常这样做,您可以编写一个小脚本来执行每个操作(当然,参数化“lib”)。
答案3
我们可以使用下面的选项来限制条目数量-l
。
locate -w lib -l 1
-w
匹配确切的单词-l
找到指定的号码出现后成功退出
或者您可以使用-b
选项
locate -b '\lib' -l 1
-b
仅将基本名称与指定模式进行匹配