Программа locate ищет в базе данных все пути, соответствующие указанному шаблону. База данных базы данных пересчитывается периодически (обычно еженедельно или ежедневно) и содержит имена всех файлов, которые являются общедоступными .
Попробуйте вместо mdfind найти
Updated2:
mdfind - имя текста, который является более точным. Просто текст mdfind дает вам файлы, которые также содержат текст. - Дэвид Крмпотик
$ 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команды, которые, кажется, преодолевают некоторые ограничения встроенных утилит.
Спасибо! но теперь, когда я знаю, 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:
#SEARCHPATHS="/"
в конфиге, это не помогло.-v
опция не производит никаких дополнительных выходных данных: /mdfind -name text
который является более точным. Простоmdfind text
дает вам файлы, которые также содержат текст.Разрешения могут быть причиной, так как locate явно не может читать файлы, которые не доступны для чтения всем пользователям. Смотрите этот ответ на Plundra для более подробного объяснения.
Пакет findutils от homebrew действительно включает
gupdatedb
иglocate
команды, которые, кажется, преодолевают некоторые ограничения встроенных утилит.источник
mdutil
есть ли смысл проверить это? Один из вариантов использования, о котором я могу подумать, заключается в том, что я могу запустить повторное сканирование вручнуюgupdatedb
- с помощью Spotlight это не так просто, или это займет больше времени (это также индексирует содержимое файлов). Есть ли другие преимущества?updatedb
быстрее для этого.glocate
Кажется, нет проблем с индексацией системных файлов, в то время как я считаю,mdfind
игнорирует ~ / Library и другие системные файлы. Я определенно считаю , я получить больше хитов сglocate
более чемmdfind
в большинстве случаев. YMMV.sudo gupdatedb
, а затем сохранилglocate Radium
вывод. Затем я побежалgupdatedb
и сказал:,/.Trashes: Permission denied
то же самое для некоторых других папок. Я сравнил вывод для обоих, и это было то же самое! Странно ...sudo gupdatedb
(запустив его с правами root), а затем позже запустилисьgupdatedb
как обычный пользователь, у которого не было бы доступа к файлам, к которым у корневого пользователя был бы доступ, то есть вы получите В разрешении отказано в ошибках. Если вам нужна полная база данных имен файлов для всей вашей системы, продолжайте запускать ее как root. Это предоставляет ваши файлы другим пользователям в системе, которые могут использоватьglocate
команду. Но если вы единственный пользователь, это должно быть хорошо.Если вы хотите выполнить поиск в той же базе данных, что и Spotlight, вы можете использовать эту
mdfind
команду в качестве альтернативы (но не точной замены) дляlocate
:источник