如何传递多个DB文件来定位?

如何传递多个DB文件来定位?

我想将多个数据库文件传递给locate命令,如下所示:

locate -d ~/.a_locate.db:~/.b_locate.db: -Ai file_to_find

但这给了我这个错误:

locate: can not stat () `~/.b_locate.db': No such file or directory

定位的手册页说:

-d, --database DBPATH 用 DBPATH 替换默认数据库。

DBPATH 是一个以 : 分隔的数据库文件名列表。如果指定了多个 --database 选项,则生成的路径是单独路径的串联。

我不清楚“分开的串联”是什么意思,我做错了什么?我尝试给出完整路径 ( /home/user/.b_locate.db) 并且它有效。有人可以解释这种行为吗?

(我mlocate在 Arch linux 中使用包)

答案1

第二个~没有被扩展;尝试

locate -d "${HOME}/.a_locate.db:${HOME}/.b_locate.db:" -Ai file_to_find

相反,或者,因为这是 zsh,所以

locate -d $HOME/.a_locate.db:$HOME/.b_locate.db: -Ai file_to_find

原因是它~/仅在 shell 单词的开头进行扩展。 shell 单词仅以空格结尾(就这里而言,实际规则要复杂得多)。~/foo:~/bar是一个单词,以 开头,~/因此前导~扩展到您的主目录,但中间~没有什么特别的,因此它仍然是波形符。赋值的右侧有一个例外: in PATH=~/foo:~/bar,在赋值符号之后和右侧的a 之后~/展开。=:

相关内容