Update on 2016-02-14: Now I just use spotlight builtin indexing:
alias l=' mdfind -name'
, and the crontab entry could be removed.
以前在Linux下,我用locate找个人的文件,现在在Mac下,Alfred找文件始终有些不太习惯,于是又开始折腾。
首先Mac下有locate命令的,接受参数与Linux下的基本一样。可是,建立locate的数据库
文件的命令不是updatedb
,而是/usr/libexec/locate.updatedb
。直接执行这个,报错
sh-3.2# /usr/libexec/locate.upda'db
mktemp: too few X's in template ‘updatedb’
chown: missing operand after ‘nobody’
Try 'chown --help' for more information.
/usr/libexec/locate.updatedb: line 97: /var/db/locate.database: Permission denied
rm: missing operand
Try 'rm --help' for more information.
Google了一把,有日本友人也发现了这个问题,原因是我装了GNU的coreutils,而
locate.updatedb
脚本要用到苹果自带的mktemp,命令行格式不一样报错。
解决方法不难,首先
cp /usr/libexec/locate.updatedb ~/bin/updatedb
然后打开~/bin/updatedb
,把所有调用mktemp
的地方改成/usr/bin/mktemp
。
然后就是在cron里面加点东西了
# 只搜索我的私人文件,数据库文件放自己的目录,一个小时运行一次
# cron配置最开始有设定 SHELL=/bin/zsh
5 * * * * SEARCHPATHS=$HOME FCODES=$HOME/.locate.db ~/bin/updatedb
再然后就是设定一个alias来使用locate了,我是写~/.zshrc
# 忽略大小写,指定数据库文件,不存命令记录(需要hist_ignore_space)
alias l=' locate -i -d ~/.locate.db'
这样以后找个文档就可以用l abc.pdf
轻松找到咯。
我也试过装findutils,用他们的updatedb和mlocate,但是findutils里的updatedb脚本也有依赖GNU版本sort的问题, 而且安装findutils会让homebrew出现一些类似的状况,所以用Mac的朋友还是用自带的locate好了。