什么是用相同的inode查找所有文件的最快方法?

我知道的唯一方法是:

find /home -xdev -samefile file1 

但是真的很慢 我想find一个像locate的工具。 真正的问题出现在你有很多文件的时候,我想操作是O(n)。

这是一个方法:

  • 使用find -printf "%i:\t%p或类似的命令创建一个由inode前缀的所有文件的列表,并输出到一个临时文件
  • 提取第一个字段 – 带有“:”后缀的inode,然后进行排序,将重复项集中在一起,然后限制为重复项,使用cut -f 1 | sort | uniq -d cut -f 1 | sort | uniq -d cut -f 1 | sort | uniq -d ,并输出到第二个临时文件
  • 使用fgrep -f加载第二个文件作为字符串列表来搜索和搜索第一个临时文件。

(当我写这个的时候,我把这个问题解释为查找所有具有重复索引节点的文件,当然,我们可以使用前半部分的输出作为一种索引,从索引节点到路径,就像查找的工作方式一样。 )

在我自己的机器上,我使用这些文件很多,并保持它们的排序。 我也有一个文本索引器应用程序,然后可以应用二进制搜索快速查找所有具有共同前缀的行。 这样的工具最终对于像这样的工作非常有用。

没有从inode到名称的映射。 唯一的办法就是走遍整个文件系统,正如你所指出的那样是O(文件数量)。 (其实,我认为这是θ(文件数量))。

我知道这是一个老问题,但许多版本的find都有一个inum选项,可以很容易地匹配一个已知的inode编号。 你可以用下面的命令来做到这一点:

 find . -inum 1234 

如果允许的话,这仍然会遍历所有的文件,但是一旦你得到一个匹配,你可以随时停止它; 我不知道如果find有一个选项可以停止一场比赛后(可能与一个-exec语句?)

这比将输出转储到文件,排序等方法要容易得多,所以应该在可用时使用。

我通常会做的是: ls -i <file>以获取该ls -i <file>的inode,然后find /dir -type f -inum <inode value> -mount 。 (您希望-mount避免在不同的文件系统上进行搜索,这可能是您性能问题的一部分。)

除此之外,我认为这是关于它的。