How do I get mlocate to only index certain directories?

I'd like to use mlocate on my Ubuntu server, but only to index certain directories (e.g. /home and /data, but not everything under /). However, mlocate's standard configuration works the opposite way; you specify the paths you want to remove (with PRUNE_PATHS).

Is there any easy way to achieve this, or any similar utility that will do what I want? (note: it should maintain an index like mlocate, so find is not acceptable, for example) Thanks.


Solution 1:

Edit the file /etc/updatedb.conf

Set up PRUNEPATHS with the directories you DO NOT want to search

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

PRUNEPATHS: A whitespace-separated list of path names of directories which should not be scanned by updatedb. Each path name must be exactly in the form in which the directory would be reported by locate. By default, no paths are skipped.

Note that all of the above configuration information can also be changed or updated through the command line options to the utility updatedb.

Solution 2:

You can use the -U option (--database-root PATH)

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

-o writes to the output file

-l 0 makes that you can read it, otherwise it is only accessible for locate

Then you can then use it like:

locate -d /home/user/databasefile Dylan

-d sets the databasepath

To use mlocate with more than one root directory, simply create two databasefiles, and use locate with two databasepath's options like this:

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

To sum it up and answer the question more specific:

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

Solution 3:

I found something else you could try:

  1. QuickSearch - "So my SearchTool use a different way: it uses 'ls' command to list content of searched folder, then does the search on that output. This way search speed is very fast (except for the first time it has to make the 'ls' output)."

Not very sure about indexing.

  1. Use tool tracker-gui
  2. Pretty lame solution sudo find "place your search directories here" > files.list grep 'filename' files.list