Как запустить updatedb, исключая некоторые пути, но не удаляя предыдущий проиндексированный контент для этих путей?

5210
Pa_

У меня странный вопрос, и я не уверен, что это вообще что-то выполнимое, поэтому я задаю его SuperUser :)

Итак, представьте, что у вас есть файловая система с некоторыми точками монтирования для дополнительных разделов.

сказать что-то вроде

/ диски / диск A / раздел A / диски / диск A / раздел B / диски / диск B / раздел A ... и т. д.

теперь, если все эти разделы смонтированы в соответствующих точках монтирования, при запуске updatedb будет проиндексирован весь контент в их файловой системе. Хорошо.

Теперь я пытаюсь настроить своего рода файловый сервер с низким потреблением и жестким диском, где я хотел бы использовать автомонтирование, где я хотел бы индексировать файлы, но где я не хочу запускать индексацию для этих дополнительных ездит каждый день.

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

Я вижу, что updatedb имеет несколько опций «сокращения», которые позволяют исключить определенные пути из процесса индексации. Но это также подразумевает отказ от всей информации о содержании, связанной с этими путями. Вместо этого я хотел бы исключить определенные пути, сохранив то, что ранее уже было проиндексировано в этих путях.

У кого-нибудь есть идеи, как добиться этого с помощью mlocate, или какой другой инструмент использовать для этого? Спасибо

4

1 ответ на вопрос

3
Ярослав Рахматуллин

Create several indexes

Use mlocate to search several database files simultaneously. Whatever you want to exclude should not be scanned in the first place. Forget about mounted vs non-mounted exclusion rules, and make indexes for the important locations.

The provided example can be adopted to your situation with little effort...

Generally speaking, you can create several index files with updatedb and update them simultaneously or one by one as frequently you want (via crond, for example).

If there is a global /etc/updatedb.conf, then it is probably wise to exclude paths that will have their own indexes - since scanning (creating index) the same location more than once will yield multiple results while scanning (searching) for the same location.

After creating binary "dictionaries" for all locations, configure a function in the shell;

function fooLocate { /usr/bin/locate \ -d /var/tmp/default.mlocate.db \ -d /my-stuff/mlocate-index2.db $@ } 

Relevant documentation

(do a man updatedb too)

man locate *scroll scroll scroll*

-d, --database DBPATH Replace the default database with DBPATH. DBPATH is a :-separated list of database file names. (...) An empty database file name is replaced by the default database. A database file name - refers to the standard input. Note that a database can be read from the standard input only once. 

Example

# updatedb -o /home/jaroslav/.locate/media-music.db -U /mnt/media/media/ \ -n images \ -n movies \ -n steamapps \ -n pr0n -v # locate -i glass -d /home/jaroslav/.locate/media-music.db| wc -l 35 # locate -i glass -d /home/jaroslav/.locate/media-music.db \ -d /var/lib/mlocate/mlocate.db | wc -l 363 
Спасибо, я надеялся на подобный вариант, на самом деле, и я не заметил, что могу сделать что-то подобное! :) Pa_ 11 лет назад 0