Вопрос Что эквивалентно команде Linux updateb для Mac?


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


215
2018-02-16 15:23


происхождения


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


ответы:


Это locate.updatedb на Mac.

sudo /usr/libexec/locate.updatedb

Для получения дополнительной информации см. locate.updatedb man page,


305
2018-02-16 15:27



Что man страница также утверждает: Обычно он запускается раз в неделю с помощью задания /System/Library/LaunchDaemons/com.apple.locate.plist. (А также man locate рассказывает об этом скрипте: /usr/libexec/locate.updatedb Сценарий для обновления базы данных локации) - Arjan
@Arjan: он должен запускаться один раз в неделю, но по умолчанию он отключен, и время, когда это должно быть сделано, - 3 часа по воскресеньям (или что-то подобное), что не очень полезно :) - Studer
На linux я обычно запускаю sudo ionice -c3 updatedb который рассказывает updatedb чтобы хорошо делиться контроллером ввода / вывода (io nice), но я не думаю, что эта команда доступна на Mac. Я также пропустил -r флаг регулярного выражения, который можно использовать с локализмом GNU, хотя я не уверен, что хочу использовать доморощенный и установить локацию GNU, упомянутую @Grogs - cwd
Пример macosx, альтернативный «locate (-r)» и «updatedb», который использует spotlight («-i» необязательно, конечно): mdfind -name «mp4» | egrep -i "^ / Пользователи. * Загрузки /.* Stuff" - michael
Кроме того, если вы не найдите файлы, которые вы ожидаете, обратите внимание на это предостережение из раздела ОШИБКИ страница руководства: 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


Ты можешь сделать sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb сделать updatedb команда доступна.


79
2017-10-18 22:29



Хех, я просто разместил это как комментарий. Тогда увидел, что ты это сказал. Я думаю, что это хороший небольшой мод. :) - James T Snell
или псевдоним в вашем .bash_profile - Jim Johnson


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

Затем у вас есть GNU locate и updatedb.

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

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

У меня есть задание cron для запуска:

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

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

export LOCATE_PATH="~/tmp/locatedb"


19
2017-12-04 02:27



Brew-install findutils на OS X Mavericks дал мне gupdatedb команды, а не updatedb один. К сожалению, эта команда дала мне описанная здесь ошибка (на который ссылается ваш ответ SO). В конечном счете, я получил псевдоним updatedb в LC_ALL=’C’ sudo updatedb как обходной путь, но я не знаю, является ли это долгосрочным решением. - David Rivers
Добавить /opt/local/libexec/gnubin в начале вашего пути, если вы хотите coreutils а также findutils установленный macports быть доступными с их оригинальными именами (а не их g-предоставляемые версии). - Ioannis Filippidis


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

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

2
2017-08-15 09:09