Updatedb 包含符号链接指向的路径

Updatedb 包含符号链接指向的路径

我已经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();.

通过对代码进行类似的修改,人们可以仅在某些目录内遵循符号链接,和/或完全排除数据库的某些目录,具体取决于需要。做出来的结果也是蛮有用的可点击的

相关内容