locate & updatedb - файлы не найдены

8

Я побежал

sudo /usr/libexec/locate.updatedb

тогда

locate Radium3

но это ничего не возвращает!

но

$ ls ~/Library/Containers/com.catpigstudios.Radium3/
Container.plist Data

Так почему не locateвидит все файлы?

Я правильно использую эту команду на OS X?

davidhq
источник

Ответы:

5

Пытаться:

sudo /usr/libexec/locate.updatedb

И посмотри конфиг:

/etc/locate.rc файл конфигурации

Отредактировано:

Опубликуйте здесь вывод:

echo $LOCATE_CONFIG

А также:

cat /etc/locate.rc

А также:

echo $0

Обновить:

https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man1/locate.1.html#//apple_ref/doc/man/1/locate

Программа locate ищет в базе данных все пути, соответствующие указанному шаблону. База данных базы данных пересчитывается периодически (обычно еженедельно или ежедневно) и содержит имена всех файлов, которые являются общедоступными .

Попробуйте вместо mdfind найти

Updated2:

mdfind - имя текста, который является более точным. Просто текст mdfind дает вам файлы, которые также содержат текст. - Дэвид Крмпотик

mdfind -name text
user3439968
источник
Я раскомментировал #SEARCHPATHS="/"в конфиге, это не помогло. -vопция не производит никаких дополнительных выходных данных: /
davidhq
Дайте дополнительную информацию для меня, плз. В ответе «Отредактировано» разделом.
user3439968
1
$ ls -la /var/db/locate.database -r - r - r-- 1 nobody wheel 19463861 6 апреля 20:08 /var/db/locate.database $ locate david.jpg / Users / david / temp /david.jpg
davidhq
1
Вы должны обновить свой ответ, mdfind -name textкоторый является более точным. Просто mdfind textдает вам файлы, которые также содержат текст.
Давидхк
3

Разрешения могут быть причиной, так как locate явно не может читать файлы, которые не доступны для чтения всем пользователям. Смотрите этот ответ на Plundra для более подробного объяснения.

Пакет findutils от homebrew действительно включает gupdatedbи glocateкоманды, которые, кажется, преодолевают некоторые ограничения встроенных утилит.

VogonPoetLaureate
источник
Спасибо! но теперь, когда я знаю, mdutilесть ли смысл проверить это? Один из вариантов использования, о котором я могу подумать, заключается в том, что я могу запустить повторное сканирование вручную gupdatedb- с помощью Spotlight это не так просто, или это займет больше времени (это также индексирует содержимое файлов). Есть ли другие преимущества?
Давидхк
1
Переиндексация с помощью mdutil / spotlight может занять некоторое время. updatedbбыстрее для этого. glocateКажется, нет проблем с индексацией системных файлов, в то время как я считаю, mdfindигнорирует ~ / Library и другие системные файлы. Я определенно считаю , я получить больше хитов с glocateболее чем mdfindв большинстве случаев. YMMV.
VogonPoetLaureate
хорошо, я проверяю это сейчас. Я думаю, что я нашел какую-то проблему ... Сначала я запустил sudo gupdatedb, а затем сохранил glocate Radiumвывод. Затем я побежал gupdatedbи сказал:, /.Trashes: Permission deniedто же самое для некоторых других папок. Я сравнил вывод для обоих, и это было то же самое! Странно ...
Давидхк
Исходя из того, что вы говорите, вы сначала запустили sudo gupdatedb(запустив его с правами root), а затем позже запустились gupdatedbкак обычный пользователь, у которого не было бы доступа к файлам, к которым у корневого пользователя был бы доступ, то есть вы получите В разрешении отказано в ошибках. Если вам нужна полная база данных имен файлов для всей вашей системы, продолжайте запускать ее как root. Это предоставляет ваши файлы другим пользователям в системе, которые могут использовать glocateкоманду. Но если вы единственный пользователь, это должно быть хорошо.
VogonPoetLaureate
2

Если вы хотите выполнить поиск в той же базе данных, что и Spotlight, вы можете использовать эту mdfindкоманду в качестве альтернативы (но не точной замены) для locate:

mdfind Radius3
bneely
источник