Locate and Updatedb
My locate
command was not returning any files located in my encrypted home
directory. As it turns out this is not indexed by default. It makes sense not
to do this, indexing the encrypted home directory and storing the index in non
encrypted locations may not be the best of ideas. However, I do want to be able
to find my files. This askubuntu thread came to my rescue. The
crux of the idea is to make an extra database with just the files from your
encrypted home directory. This extra database is also stored in your encrypted
home directory.
Creating of the usual database is done with the updatedb
command. The
updatedb
command can also be used to create a database of just a certain
location (with the -U
argument) and storing it wherever you want (with the
-o
argument). There are also some directories I do not want indexed, like
libraries or compilers relating to my programming environments. For this, you
have the -e
argument.
I create a bash file in my ~/bin/
directory in which all the arguments are
set as they should be. The myupdate.sh
file:
#!/bin/bash
IGNORE_PATHS="$HOME/.rbenv $HOME/.npm $HOME/.nvm $HOME/.gem $HOME/.rustup $HOME/.cargo"
updatedb -l 0 -e "$IGNORE_PATHS" -o $HOME/.local/share/mlocate.db -U $HOME
Executing this file will create a database in $HOME/.local/share/mlocate.db
.
I have not done so yet, but you probably want to add execution of this .sh
file to your crontab so it gets executed automatically.
Now locate
needs to actually use this database as well. To do so, the
LOCATE_PATH
needs to be set to the path of the database. This database is
then searched in addition to the usual database. The easiest way to do this is
by adding the following to your .bashrc
(or .zshrc
, or whatever shell you
fancy).
export LOCATE_PATH=$HOME/.local/share/mlocate.db