我像这样运行updatedb:updatedb --localpaths="/a /b"
/a
是一个可移动驱动器。/b
是本地硬盘。虽然/a
我并不总是可以访问,但我经常想运行locate
以查找其中是否有某个文件(基于我上次运行的时间updatedb
)。
问题是,如果我updatedb
在未插入时运行,则会收到错误:
/usr/bin/find: '/a': No such file or directory
数据库获取有关 的最新信息/b
,但删除了/a
的现有数据。有没有办法在未插入电源/a
时保留数据?/a
updatedb
我认为这对于多个数据库来说是可能的,一个用于,/a
另一个用于/b
.然后,脚本可以/a
在决定是否插入时检查是否已插入updatedb
。
但这两个命令的手册页都假设我知道的比我知道的多得多(例如,FINDOPTIONS
做什么),所以我希望有一个更简单的解决方案来解决这个问题。
答案1
我不了解 Windows 上的 Linux,也不了解 GNU 版本locate
,但你应该能够做你想做的事情。有更长版本的手册这里。
用 2 个命令替换你的单个updatedb --localpaths="/a /b"
命令,
updatedb --localpaths="/b"
if [ -d "/a" ]; then updatedb --localpaths="/a" --output=/dir/mydb; fi
其中/dir/mydb
是要保存数据库的文件的完整路径名。
当您进行定位时,将环境变量设置LOCATE_PATH
为/dir/mydb::
。原则上::
应该意味着使用标准数据库。
如果::
不起作用,您可以通过运行来获取标准数据库的文件名updatedb --help
。例如,它可能会说默认值为/usr/local/var/locatedb
.然后就可以设置了LOCATE_PATH=/dir/mydb:/usr/local/var/locatedb
。您还可以使用该-d
选项来locate
提供此数据库列表。