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

tel*_*net 19 linux

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

Paw*_*cki 14

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

locate '/some/directory/*filename*'
Run Code Online (Sandbox Code Playgroud)

比较以下命令的输出:

$ 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
$ 
Run Code Online (Sandbox Code Playgroud)

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

  • +1 这是正确答案。请注意,如果您包含通配符,则边界将变得固定。那就是在上面的例子中,`$locate '/usr/lib64/*tmpfile'` 不会返回任何结果。 (3认同)

qua*_*nta 5

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

updatedb -U /path/to/directory
Run Code Online (Sandbox Code Playgroud)

并搜索:

locate <search_string>
Run Code Online (Sandbox Code Playgroud)

更新

这在我的 Gentoo 系统上运行良好,但 CentOS 不包含-U选项。因此,您可以尝试以下方法:

使用以下命令构建数据库:

# updatedb -U /path/to/dir -o dir_locate.db
Run Code Online (Sandbox Code Playgroud)

并搜索:

# locate -d dir_locate.db <search_string>
Run Code Online (Sandbox Code Playgroud)

  • “locate -U”抛出一个无效的选项错误......猜你的意思是“updatedb -U”?同样值得注意的是,如果您想搜索另一个目录,这需要 mlocate.db 重建(updatedb)。 (3认同)

gha*_*per 3

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

locate search_term | grep "/specified/directory"
Run Code Online (Sandbox Code Playgroud)

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