Почему команда unix locate по-прежнему показывает файлы / папки, которых больше нет? - PullRequest
8 голосов
/ 30 июня 2009

Я недавно переместил всю свою локальную область веб-разработки на использование MacPorts вместо использования MAMP на моем Mac. Я вхожу в Python / Django и больше не нуждаюсь в MAMP.

Дело в том, что я удалил MAMP из папки «Программы», тоже с файлом настроек, но почему, когда я запускаю команду «locate MAMP» в Терминале, она все равно показывает все мои / Applications / MAMP / вещи, как будто это все еще там? И когда я 'cd' в / Applications / MAMP / его не существует?

Какое-то отношение к тому, что locate является своего рода системой поиска по индексу, следовательно, что эти старые пути к файлам кэшируются? Пожалуйста, объясните, почему и как сортировать, чтобы они больше не показывались.

Ответы [ 5 ]

8 голосов
/ 30 июня 2009

У вас правильная идея: locate использует базу данных с именем 'locatedb'. Это обычно обновляется системными заданиями cron (не уверен, какой на OS X); Вы можете принудительно обновить команду updatedb. См. http://linux -sxs.org / utilities / updatedb.html среди других.


Кроме того, если вы не найдете файлы, которые ожидаете, обратите внимание на это важное предостережение из раздела BUGS в OSX ' locate (1) man-page:

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.

6 голосов
/ 30 июня 2009

Другие ответы верны о необходимости обновления базы данных locate. У меня есть этот псевдоним, чтобы обновить мою базу данных locate:

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

Я на самом деле больше не использую locate теперь, когда нашел mdfind . В нем используется индексный файл, который OSX намного лучше поддерживает в актуальном состоянии, чем в расположенном b. Он также имеет гораздо больше возможностей для поиска в командной строке.

0 голосов
/ 30 июня 2009

Взгляните на man-страницу locate

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

Вы увидите, что locate ищет базу данных, а не вашу фактическую файловую систему. Вы можете обновить эту базу данных с помощью команды updatedb.

Кроме того, поскольку это база данных, если вы регулярно ее не обновляете, найдите, что в вашей файловой системе нет файлов, которых нет в базе.

0 голосов
/ 30 июня 2009

Согласно справочной странице, ее база данных обновляется раз в неделю:

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.
0 голосов
/ 30 июня 2009

Действительно, команда locate выполняет поиск по индексу, поэтому она довольно быстрая. Индекс генерируется командой updatedb , которая обычно запускается как ночная или еженедельная работа.

Чтобы обновить его вручную, просто запустите updatedb .

...