Что эквивалентно команде Linux updatedb для Mac?

98230
Thierry Lam

Если я хочу использовать locateкоманду на компьютере с Linux, я обычно запускаю sudo updatedbсначала для обновления базы данных. Я могу запустить locateкоманду на OS X 10.5, но не могу найти updatedb. Что такое соответствующий updatedb для Mac?

220
При первом запуске `locate` в окне OS X он говорит вам запустить` sudo launchctl load -w / System / Library / LaunchDaemons / com.apple.locate.plist`. Török Gábor 14 лет назад 0
В зависимости от того, для чего вам нужно использовать `locate`, может оказаться более удобным использовать интерфейс командной строки для Spotlight,` mdfind`, поскольку база данных Spotlight почти всегда актуальна и предлагает гораздо больше функций. чем найти. `man mdfind` Paul R 14 лет назад 11
Хорошо upatedb и locate - это хорошие вещи, но они требуют регулярного запуска updatedb (так как updatedb запускается регулярно, что замедляет работу вашей системы в неудобное время, или locate показывает ссылки на файлы, которых больше нет). Так что я думаю, что вместо настройки locate / updatedb, возможно, было бы лучше познакомиться с (гораздо более мощным) поиском. amo-ej1 14 лет назад 0
Хотя find полезен для многих вещей, он должен каждый раз проходить через файловую систему. Если вы можете сузить места, где вы смотрите, это нормально. Преимущество locate заключается в том, что он хранит свою собственную базу данных и поэтому не нуждается в поиске каждый раз. Это особенно важно для больших и / или удаленных файловых систем. Я думаю, что у каждого есть свое место. KeithB 14 лет назад 9

4 ответа на вопрос

311
John T

Это locate.updatedbна Mac.

sudo /usr/libexec/locate.updatedb

Для получения дополнительной информации см. Справочную страницу locate.updatedb .

Эта страница `man` также утверждает: * Обычно она запускается один раз в неделю заданием /System/Library/LaunchDaemons/com.apple.locate.plist. * (И` man locate` рассказывает об этом сценарии: * / usr /libexec/locate.updatedb Скрипт для обновления базы данных locate *) Arjan 14 лет назад 9
@Arjan: Его следует запускать раз в неделю, но по умолчанию он отключен, а время, когда это должно быть сделано, - 3 часа ночи по воскресеньям (или что-то подобное), что не очень полезно :) Studer 14 лет назад 5
В linux я обычно запускаю `sudo ionice -c3 updatedb`, который сообщает` updatedb` о том, чтобы красиво разделить контроллер ввода-вывода (очень хорошо), но я не думаю, что эта команда доступна на mac. Я также скучаю по наличию флага регулярного выражения `-r`, который можно использовать с локализацией GNU, хотя я не уверен, что хочу использовать homebrew и установить локализацию GNU, упомянутую @Grogs cwd 12 лет назад 0
Пример альтернативы macosx для "locate (-r)" и "updatedb", в котором используется прожектор (разумеется, "-i"): mdfind -name "mp4" | egrep -i "^ / Users. * Downloads /.* Stuff" michael 11 лет назад 3
Кроме того, если вы * не * находите файлы, которые ожидаете, обратите внимание на это предостережение в разделе BUGS [manpage] (http://developer.apple.com/library/mac/#documentation/Darwin/ Reference / ManPages / man1 / locate.1.html): `База данных locate обычно создается пользователем 'nobody', а утилита locate.updatedb (8) пропускает каталоги, которые не доступны для чтения для пользователя nobody. группа "никто" или мир. Например, если ваш каталог HOME не доступен для чтения, ни один из ваших файлов не находится в базе данных` Ashutosh Jindal 8 лет назад 0
f вы получаете `shell-init: ошибка при получении текущего каталога: getcwd: не удается получить доступ к родительским каталогам: в доступе отказано` `cd` для вашего домашнего каталога, то есть` cd ~ ` Michael Durrant 8 лет назад 0
В MacOS Sierra, если вы получили ошибку об отказе в разрешении, попробуйте зайти в root `cd /` и затем выполнить `sudo / usr / libexec / locate.updatedb`. yossile 7 лет назад 0
@michael спасибо, что указали, что `mdfind` является альтернативой использованию` locate` в Mac OS. Noah Sussman 7 лет назад 0
81
Igor Vigasin

Вы можете сделать, sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbчтобы сделать updatedbкоманду доступной.

Хех, я только что опубликовал это как комментарий .. Потом увидел, что ты сказал это. Я думаю, что это хороший маленький мод, чтобы сделать. :) James T Snell 9 лет назад 0
или псевдоним это в вашем .bash_profile Jim Johnson 8 лет назад 3
19
Grogs

Лично я только что установил findutils (использую MacPorts или Homebrew).

Тогда у вас есть GNU locate и updatedb.

updatedb не будет работать без sudo.

Лично я предпочитаю иметь каждого пользователя, расположенногоb; если вы sudo, другие пользователи будут знать имена / расположение всех ваших файлов.

У меня есть работа cron:

updatedb --localpaths='/Users/grogs' --output='/Users/grogs/tmp/locatedb'

И в моем .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"

Brew-install findutils на OS X Mavericks дал мне команду `gupdatedb`, а не команду` updatedb`. К сожалению, эта команда дала мне [описанную здесь ошибку] ​​(http://www.rubycoloredglasses.com/2012/03/locate-and-updatedb-with-homebrew/) (где упоминается ваш SO-ответ). В конечном итоге я добавил псевдоним `updatedb` в` LC_ALL = 'C' sudo updatedb`, но я не знаю, является ли это долгосрочным решением. David Rivers 10 лет назад 3
Добавьте `/ opt / local / libexec / gnubin` в начале вашего пути, если вы хотите, чтобы` coreutils` и `findutils`, установленные` macports`, были доступны с их исходными именами (а не с префиксом `g` версии). Ioannis Filippidis 10 лет назад 2
2
Peer Gynt

Если вы запустите locate без предварительного обновления базы данных, у вас будет возможность увидеть рекомендуемый путь ОС по ее выводу.

WARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command:  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist 

Похожие вопросы