![Updatedb 包含符号链接指向的路径](https://linux22.com/image/174815/Updatedb%20%E5%8C%85%E5%90%AB%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E6%8C%87%E5%90%91%E7%9A%84%E8%B7%AF%E5%BE%84.png)
我已经mlocate
使用特定文件夹的内容创建了数据库。我发现它updatebd
不包括数据库中符号链接指向的路径。
如何在数据库中包含符号链接指向的路径?
出奇:移动定位有一个默认选项-L
或--follow
在检查文件存在时遵循尾随符号链接(默认)。
它的目的是什么时候更新数据库不包括符号链接!
参考:
答案1
使用这个实现如果使用包含 updatedb 的 plocate,可以构建一个自定义版本来跟踪符号链接。我不知道它是否也回答了 mlocate 的问题,我只使用 plocate。
如果您确定文件系统中不会出现循环,则只需替换代码即可
e.is_directory = (de->d_type == DT_DIR);
经过
e.is_directory = (de->d_type == DT_DIR) || (de->d_type == DT_LNK); // or even just true
在文件中updatedb.cpp
。
如果您可能有循环,这里有一个解决方案(可能不是很有效)。总是在函数之前updatedb.cpp
声明一个全局变量。然后,在该函数的前两个测试之后添加以下代码:vector<char*> explored;
int scan(...)
scan
char buf[PATH_MAX];
realpath(path.c_str(),buf);
for (auto &e : explored)
if (strcmp(e,buf) == 0)
return 0;
explored.push_back(buf);
return
在每个函数之前添加一个explored.pop_back();
.
通过对代码进行类似的修改,人们可以仅在某些目录内遵循符号链接,和/或完全排除数据库的某些目录,具体取决于需要。做出来的结果也是蛮有用的可点击的。