如何在指定目录中使用locate命令?


16

locate在Linux上使用命令。我目前的用法是搜索整个文件系统。我只希望它在特定目录中搜​​索。我怎样才能做到这一点?


TLDR:这是locate在指定目录中进行搜索的终端别名:alias my_locate="updatedb -U /path/to/yourdir -o /path/to/your_dir_locate.db; locate -d /path/to/dir_locate.db " 别名生效后,在终端类型上my_locate *foo*,您便可以参加比赛。您可以使用冒号字符连接数据库来连接数据库更新并定位搜索。rtfm:linux.die.net/man/8/updatedb
Eric Leschinski

Answers:


11

另一种方法是在中使用模式匹配locate

locate '/some/directory/*filename*'

比较以下命令的输出:

$ locate tmpfile
/usr/lib64/perl5/auto/POSIX/tmpfile.al
/usr/share/man/fr/man3/tmpfile.3.gz
/usr/share/man/ja/man3/tmpfile.3.gz
/usr/share/man/man3/tmpfile.3.gz
/usr/share/man/man3p/tmpfile.3p.gz
$
$ locate '/usr/lib64/*tmpfile*'
/usr/lib64/perl5/auto/POSIX/tmpfile.al
$ 

locate /usr/lib*tmpfile* 给出相同的结果。


3
+1这是正确的答案。请注意,如果包含通配符,则边界将变为固定。那就是在上面的例子中,$ locate '/usr/lib64/*tmpfile'将不返回任何结果。
xofer 2011年

如果您想要更多的控制权而不是简单的通配符可以提供的控制权,则可以始终locate通过管道传递的结果grep
Ladadadada 2014年

5

使用以下命令为您的特定目录创建slocate数据库:

updatedb -U /path/to/directory

并搜索:

locate <search_string>

更新

这在我的Gentoo系统上工作正常,但CentOS不包含-U选项。因此,您可以尝试以下操作:

使用以下方法构建数据库:

# updatedb -U /path/to/dir -o dir_locate.db

并搜索:

# locate -d dir_locate.db <search_string>

3
“ locate -U”引发无效的选项错误...猜测您的意思是“ updatedb -U”?同样要注意的是,如果您要搜索其他目录,则需要mlocate.db重建(updatedb)。
gharper 2011年

哦,在我的Gentoo上可以正常工作,但CentOS不包含此选项。
量子

否决票?你能发表评论吗?
量子

如果您有类似以下错误updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permitted,请检查如何在linux上以普通用户身份使用updatedb命令
kenorb 2014年

2

我能想到的最简单的答案是

locate search_term | grep "/specified/directory"

更好的解决方案可能是使用“查找”及其路径选项...


0

最简单的方法如下例所示:

updatedb -o ~/tmp.db -l0 -U $PWD
locate   -d ~/tmp.db "foo"

更改$PWD到你指定的目录。

上面的示例将仅为特定目录创建本地数据库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.