Який еквівалент оновленій команді Linux для Mac?


234

Якщо я хочу використовувати locateкоманду на машині Linux, я зазвичай запускаю sudo updatedbспочатку для оновлення бази даних. Я можу запустити locateкоманду на OS X 10.5, але не можу знайти updatedb. Що відповідає оновленомуb для mac?


Добре upatedb і locate - це приємні речі, але вони потребують регулярного запуску updateb (або оновленняb працює регулярно, і це уповільнює вашу систему в незручний час, або locate показує посилання на файли, яких більше немає). Тому я думаю, що замість налаштування locate / updateb, можливо, краще ознайомитись із (набагато потужнішою) знахідкою.
amo-ej1

9
Хоча пошук корисний для багатьох речей, йому потрібно щоразу проходити через файлову систему. Якщо ви можете звузити місця, де ви шукаєте, це добре. Перевага locate полягає в тому, що він зберігає власну базу даних, і тому її не потрібно шукати кожен раз. Це особливо важливо для великих та / або віддалених файлових систем. Я думаю, що кожен має своє місце.
KeithB

1
Під час першого запуску locateу вікні OS X він говорить про запуск sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist.
Török Gábor

12
Залежно від того, для чого вам потрібно скористатися locate, можливо, вам буде зручніше використовувати інтерфейс командного рядка для Spotlight mdfind, оскільки база даних Spotlight майже завжди є актуальною та пропонує набагато більше функціональних можливостей, ніж пошук. 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 Сценарій для оновлення бази даних locate )
Ар'ян

5
@Arjan: Його потрібно запускати раз на тиждень, але за замовчуванням він вимкнено, а час, коли це потрібно зробити, - 3 ранку по неділях (або щось подібне), що не дуже корисно :)
Студент

У Linux я зазвичай запускаю, sudo ionice -c3 updatedbщо говорить, updatedbщоб поділитися контролером вводу / виводу (io nice), але я не думаю, що ця команда доступна на mac. Я також сумую за тим, щоб мати -rпрапор регулярного виразу, який можна використовувати з локацією GNU, хоча я не впевнений, що хочу використовувати домашню мову та встановити локацію GNU, згадану @Grogs
cwd

3
Приклад альтернативи macosx "locate (-r)" та "updatedb", що використовує прожектор ("-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

85

Можна зробити, sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbщоб updatedbкоманда була доступною.


Хе, я щойно опублікував це як коментар .. Потім побачив, що ти це сказав. Я думаю, що це хороший маленький мод зробити. :)
Джеймс Т Снелл

3
або псевдонім у своєму .bash_profile
Jim Johnson

19

Особисто я щойно встановив findutils (використовуйте MacPorts або Homebrew).

Потім у вас є пошук GNU та оновленняb.

updatedb не працюватиме без sudo.

Особисто я вважаю за краще, щоб на кожного користувача знаходивсяb; якщо ви користуєтеся судом, інші користувачі будуть знати назви / місця усіх ваших файлів.

У мене є керована робота:

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

І в моєму .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"


3
Встановлення Brew встановлення на OS X Mavericks дало мені gupdatedbкоманду, а не updatedbодну. На жаль, ця команда дала мені помилку, описану тут (де посилається ваша відповідь ТА). В кінці кінців я псевдоніми 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.