Как заставить mlocate индексировать только определенные каталоги?

23

Я хотел бы использовать mlocate на моем сервере Ubuntu, но только для индексирования определенных каталогов (например, /homeи /data, но не всего, что в /). Однако стандартная конфигурация mlocate работает противоположным образом; Вы указываете пути, которые хотите удалить (с помощью PRUNE_PATHS).

Есть ли какой-нибудь простой способ добиться этого или какая-либо аналогичная утилита, которая будет делать то, что я хочу? (примечание: он должен поддерживать такой индекс, как mlocate, например , findнеприемлемо). Спасибо.

Эндрю Ферье
источник

Ответы:

16

Вы можете использовать опцию -U (--database-root PATH)

updatedb -l 0 -U /home/user/music -o /home/user/databasefile

-o пишет в выходной файл

-l 0 означает, что вы можете прочитать его, в противном случае он доступен только для поиска

Затем вы можете использовать его следующим образом:

locate -d /home/user/databasefile Dylan

-d устанавливает путь к базе данных

Чтобы использовать mlocate с более чем одним корневым каталогом, просто создайте два файла базы данных и используйте команду locate с двумя параметрами databasepath, например так:

locate -d /home/user/dbfile1 -d /home/user/dbfile2 searchstring

Подводя итог и ответьте на вопрос более конкретно:

updatedb -l 0 -U /home -o /home/user/home_dbfile
updatedb -l 0 -U /data -o /home/user/data_dbfile
locate -d /home/user/home_dbfile -d /home/user/data_dbfile Dylan
Janghou
источник
Upvoting, так как это частичный ответ. Тем не менее, это позволяет только для белого списка один путь. Мой вопрос был конкретно о том, как внести в белый список более одного пути.
Эндрю Ферье
1
Улучшенный ответ и для более легкой обработки я предлагаю создать псевдоним
Janghou
хороший ответ! Я не знал, что вы можете искать в двух базах данных параллельно, спасибо за разъяснения. Я собираюсь отметить это как принятое, если не получится лучший ответ!
Эндрю Ферье
Является ли updatedb -l 0 -U /home/user/musicрекурсивным? Кажется, не в моем случае
Gaia
22

Редактировать файл /etc/updatedb.conf

Настройте PRUNEPATHSкаталоги, которые вы не хотите искать

PRUNEPATHS="/tmp /var/spool /media"

PRUNEPATHS: Разделенный пробелами список путей к каталогам, которые не должны проверяться updatedb. Каждое имя пути должно быть точно в форме, в которой каталог будет сообщаться с помощью locate. По умолчанию пути не пропускаются.

Обратите внимание, что вся приведенная выше информация о конфигурации также может быть изменена или обновлена ​​с помощью параметров командной строки утилиты updatedb.

LnxSlck
источник
Нет, это полная противоположность того, что я хочу. Это будет индексировать все, кроме этих каталогов.
Эндрю Ферье
Вы можете установить PRUNEPATHS со всем, кроме ваших каталогов. Таким образом, он будет сканировать только ваши каталоги.
LnxSlck
ОК, спасибо за разъяснения. Это немного непрактично, потому что, когда я добавляю подкаталоги наряду с каталогами, которые я хочу индексировать, мне нужно помнить, чтобы добавлять их в PRUNEPATHS. Тем не менее, это будет работать. Спасибо за предложение.
Эндрю Ферье
Да, я знаю, но я не могу найти много информации о mlocate, чтобы сделать это. Разве вы не можете использовать что-то вроде поиска?
LnxSlck
Нет, у меня много данных, поэтому важно, чтобы они были проиндексированы. Уточнили в вопросе.
Эндрю Ферье
1

Я нашел что-то еще, что вы можете попробовать:

  1. QuickSearch - «Так что мой SearchTool использует другой способ: он использует команду« ls »для вывода списка содержимого искомой папки, а затем выполняет поиск по этому выводу. Таким образом, скорость поиска очень высокая (за исключением первого раза, когда он должен сделать вывод 'ls). "

Не очень уверен насчет индексации.

  1. Используйте инструмент tracker-gui
  2. Довольно слабое решение sudo найти "разместить ваши каталоги поиска здесь"> files.list grep 'filename' files.list
LnxSlck
источник
Старайтесь не добавлять несколько ответов. При необходимости отредактируйте существующий ответ и добавьте дополнительную информацию. Спасибо.
Джокердино
Да, я сделаю это
LnxSlck