2009-06-29 5 views
8

Недавно я переместил всю свою локальную область веб-разработки на использование материалов MacPorts, вместо того, чтобы использовать MAMP на своем Mac. Я попал в Python/Django и больше не нуждался в MAMP.Почему команда unix locate все еще показывает файлы/папки, которых больше нет?

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

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

ответ

8

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


Кроме того, если вы не найти файлы, которые вы ожидаете, отметить этот важный нюанс из раздела клопов locate(1) человеко-страницы OSX»:

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.

+0

По той же причине locate не показывает вам недавно созданные файлы - любые файлы, созданные с момента последнего обновления b, не видны путем поиска. –

+0

На OSX 10.10, системный cron, который обновляет db, это '/ System/Library/LaunchDaemons/com.apple.locate.plist' –

+0

Кроме того, если вы * не * находите файлы, которые вы ожидаете, обратите внимание на это важное предостережение от BUGS раздел OSX '[locate (1)] (http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/locate.1.html) man-страница: 'База данных локации обычно создается пользователем '' nobody '', а утилита locate.updatedb (8)пропускает каталоги, которые не читаются для пользователя '' nobody '', group '' nobody '' или world. Например, если ваш каталог HOME не читается в мире, ни один из ваших файлов не находится в базе данных. ' –

0

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

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

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. 
0

Посмотрите на странице найти человека

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

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

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

6

Другие ответы правильные относительно необходимости обновления базы данных локации. Я получил этот псевдоним, чтобы обновить мое местонахождение DB:

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

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

+0

Это занимает навсегда .... –

 Смежные вопросы

  • Нет связанных вопросов^_^