当目录包含名称时,locate 停止重复

当目录包含名称时,locate 停止重复

有时,当使用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仅将基本名称与指定模式进行匹配

相关内容