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

234

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

Тьерри Лам
источник
Хорошо upatedb и locate - это приятные вещи, но они требуют регулярного запуска updatedb (updatedb запускается регулярно, что замедляет работу вашей системы в неудобное время, или locate показывает ссылки на файлы, которых больше нет). Так что я думаю, что вместо установки locate / updatedb, возможно, было бы лучше познакомиться с (гораздо более мощным) поиском.
amo-ej1
9
Хотя find полезен для многих вещей, он должен каждый раз проходить через файловую систему. Если вы можете сузить места, где вы смотрите, это нормально. Преимущество locate заключается в том, что он хранит свою собственную базу данных и поэтому не нуждается в поиске каждый раз. Это особенно важно для больших и / или удаленных файловых систем. Я думаю, что у каждого есть свое место.
KeithB
1
При первом запуске locateв окне OS X он говорит вам, чтобы запустить sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist.
Тёрёк Габор
12
В зависимости от того, что вам нужно использовать locate, вам может быть удобнее использовать интерфейс командной строки для Spotlight mdfind, поскольку база данных Spotlight почти всегда актуальна и предлагает гораздо больше функциональных возможностей, чем locate. man mdfind
Пол Р

Ответы:

327

Это locate.updatedbна Mac.

sudo /usr/libexec/locate.updatedb

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

Джон Т
источник
9
Эта manстраница также утверждает: она обычно запускается один раз в неделю заданием /System/Library/LaunchDaemons/com.apple.locate.plist. man locateрассказывает об этом сценарии: /usr/libexec/locate.updatedb Script для обновления базы данных locate )
Арджан,
5
@Arjan: Его следует запускать раз в неделю, но по умолчанию он отключен, а по воскресеньям его нужно делать в 3 часа ночи (или что-то в этом роде), что на самом деле бесполезно :)
Studer
В Linux я обычно запускаю, sudo ionice -c3 updatedbкоторый говорит, updatedbчтобы разделить контроллер ввода-вывода (хорошо), но я не думаю, что эта команда доступна на Mac. Я также скучаю по наличию -rфлага регулярного выражения, который можно использовать с локализацией GNU, хотя я не уверен, что хочу использовать homebrew и установить локализацию GNU, упомянутую @Grogs
cwd
3
Пример альтернативы macosx для "locate (-r)" и "updatedb", который использует прожектор (конечно, "-i" необязательно): mdfind -name "mp4" | egrep -i "^ / Users. * Загрузки / .* Материал"
Майкл
Кроме того , если вы не нашли файлы , которые вы ожидаете, отметить это соответствующее предостережение из раздела клопов страницы руководства : 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
Ashutosh Jindal
85

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

Игорь Вигасин
источник
Хех, я только что опубликовал это как комментарий .. Потом увидел, что ты сказал это. Я думаю, что это хороший маленький мод, чтобы сделать. :)
Джеймс Т Снелл
3
или псевдоним в вашем .bash_profile
Джим Джонсон
19

Лично я только что установил 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"

Grogs
источник
3
Установка Brew Findutils на OS X Mavericks дал мне gupdatedbкоманду, а не updatedbодну. К сожалению, эта команда выдала мне ошибку, описанную здесь (где указан ваш SO-ответ). В конце концов я псевдонимы updatedbв LC_ALL=’C’ sudo updatedbкачестве временного решения, но я не знаю , если это долгосрочное решение.
Дэвид Риверс
2
Добавьте /opt/local/libexec/gnubinв начале вашего пути, если вы хотите, чтобы coreutilsи findutilsустановленный macportsбыл доступен с их оригинальными именами (а не с их gпрефиксными версиями).
Иоаннис Филиппидис
2

Если вы запустите 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
Танкист 六四
источник