Gih's Blog

只言片语

用locate建立用户的文件索引数据库

2011-07-04 by gihnius, tagged as linux, unix

locate是常规的unix/linux系统自带工具, 用于快速查找文件. 与find不同, find是实时查找而且功能强大, 通常用在脚本中, 但对于桌面用户, 日常查找一些文件, 用find 就有些"大材小用"了, 你不觉得平时find $HOME -xxx yyy时要耗费很多时间吗?

locate就不一样, 它是通过事先建立索引再进行搜索的, 建立索引时就是使用find这个工具. 而平时用得较多的就是用户在自己的HOME目录下查找文件(假设用户都把自己的数据放到$HOME目录下,除此之外就是系统文件). 可以配置locate$HOME目录建立索引. 下面是我在 FreeBSD下的操作:

## shell profile
export LOCATE_CONFIG=$HOME/.locate.rc
alias updatedb='/usr/libexec/locate.updatedb'
alias locate='locate -d ~/.locate.db' 
copy /etc/locate.rc $HOME/.locate.rc 并修改以下几个选项:
## locate profile
# temp directory
TMPDIR="/tmp"

# the actual database
FCODES="$HOME/.locate.db"

# directories to be put in the database
SEARCHPATHS="$HOME/" 
通过 man updatedb 可以看到 LOCATE_CONFIG 这个变量是用于设置 updatedb 的配置文件位置的.之后就是按照自己的需要更新索引了. 可以在crontab 里设置:
15 12 * * *     $HOME/bin/cronsh.sh /usr/libexec/locate.updatedb > /dev/null 2>&1
...
cronsh.sh 是我为crontab设置环境变量而增加的.locate 的功能很强大, 支持正则表达式搜索.