10

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

问题是,我已经从 Applications 文件夹中卸载了 MAMP,还有首选项文件,但是当我在终端中运行“locate MAMP”命令时,它仍然显示我所有的 /Applications/MAMP/ 东西,就好像它仍然存在一样? 而当我 ' cd' 进入 /Applications/MAMP/ 它不存在?

与 locate 是一种索引搜索系统有关,因此这些旧文件路径被缓存了吗?请解释原因以及如何对其进行排序以使其不再显示。

4

5 回答 5

9

你有正确的想法: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.

于 2009-06-29T22:40:37.987 回答
6

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

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

找到mdfind 后,我实际上不再使用 locate 了。它使用 Spotlight 文件索引,与 locateb 相比,OSX 在保持最新方面要好得多。它还可以从命令行搜索更多功能。

于 2009-06-30T03:19:32.820 回答
0

确实,locate命令搜索索引,这就是它非常快的原因。该索引由updatedb命令生成,该命令通常作为每晚或每周作业运行。

所以要手动更新它,只需运行updatedb

于 2009-06-29T22:41:54.503 回答
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.
于 2009-06-29T22:42:01.993 回答
0

查看定位手册页

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

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

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

于 2009-06-29T22:43:13.020 回答