我知道的唯一方法是:
find /home -xdev -samefile file1
但是真的很慢 我想find一个像locate
的工具。 真正的问题出现在你有很多文件的时候,我想操作是O(n)。
这是一个方法:
find -printf "%i:\t%p
或类似的命令创建一个由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
避免在不同的文件系统上进行搜索,这可能是您性能问题的一部分。)
除此之外,我认为这是关于它的。