为什么unix locate命令仍然显示不再存在的文件/文件夹?

时间:2009-06-29 22:35:24

标签: macos unix terminal mamp locate

我最近将整个本地Web开发区域移到了使用MacPorts的东西上,而不是在我的Mac上使用MAMP。我已经进入Python / Django并且不再需要MAMP了。

事实上,我已经从Applications文件夹中卸载了MAMP,也有偏好文件,但是当我在终端中运行'locate MAMP'命令时,它仍然显示我的所有/ Applications / MAMP /东西,好像它是一切还在吗?当我'cd'进入/ Applications / MAMP /它不存在?

与loc是一种索引搜索系统有关,因此这些旧的文件路径被缓存了吗?请解释原因,以及如何排序,以便它们不再显示。

5 个答案:

答案 0 :(得分:8)

您有正确的想法:locate使用名为“locatedb”的数据库。它通常由系统cron作业更新(不确定OS X上的哪个);您可以使用updatedb命令强制更新。请参阅http://linux-sxs.org/utilities/updatedb.html等。


此外,如果您找到您期望的文件,请注意OSX'locate(1)手册页的BUGS部分中的这一重要警告:

The locate database is typically built by user ''nobody'' and the locate.updatedb(8) utility skips directories which are not readable for user ''nobody'', group ''nobody'', or world. For example, if your HOME directory is not world-readable, none of your files are in the database.

答案 1 :(得分:6)

其他答案对于需要更新locate数据库是正确的。我有这个别名来更新我的定位数据库:

alias update_locate='sudo /usr/libexec/locate.updatedb'

我找到mdfind后,实际上我不再使用定位了。它使用聚光灯文件索引,与locateb相比,OSX更好地保持最新状态。它在从命令行搜索的功能方面也有相当多的功能。

答案 2 :(得分:0)

确实 locate 命令搜索索引,这就是为什么它非常快。 索引由 updatedb 命令生成,该命令通常以夜间运行 或每周工作。

因此,要手动更新,只需运行 updatedb

答案 3 :(得分:0)

根据手册页,其数据库每周更新一次:

NAME
     locate.updatedb -- update locate database

SYNOPSIS
     /usr/libexec/locate.updatedb

DESCRIPTION
     The locate.updatedb utility updates the database used by locate(1).  It is typically run once a week by
     the /etc/periodic/weekly/310.locate script.

答案 4 :(得分:0)

查看locate手册页

http://unixhelp.ed.ac.uk/CGI/man-cgi?locate+1

您会看到locate搜索数据库,而不是实际的文件系统。 您可以使用updatedb命令更新该数据库。

此外,由于它是一个数据库,除非你定期更新它,否则找不到文件系统中不存在于数据库中的文件。