如何有效地获取文件(包括目录类型)的所有“别名”列表?

如何有效地获取文件(包括目录类型)的所有“别名”列表?

假设一个文件:如何有效地获取文件(包括目录类型)的所有别名的列表:

  1. 可以有多个硬链接、多个软链接、多级软链接
  2. 可能存在于安装在同一文件系统中另一个位置的目录下
  3. 可能存在于具有指向它的链接的目录下;再次具有 1 中提到的功能的链接

可能的解决方案是使用索引节点吗?

答案1

硬链接可以通过比较两者的inode号来识别设备号(两个不同的挂载文件系统可能都有一个具有相同 inode 号的文件,但它们将具有不同的设备号)。您可以使用 手动读取设备/索引节点stat $file,也find可以使用 为您执行此操作-samefile。您可以通过仅在同一设备内搜索来更有效地搜索硬链接:

find $fsroot/. -mount -samefile $myfile

软链接更难,因为它们可以位于任何地方。您需要取消引用它们来识别索引节点/设备。您可以使用以下命令手动执行此操作stat -L或使用以下命令自动执行此操作find -L

find -L / -samefile $myfile

请注意,这将找到硬链接。我认为没有find一种简单的方法可以仅搜索指向特定索引节点的软链接。

某些文件系统可能可以更有效地告诉您此信息,但我认为在一般情况下您需要扫描每个文件。

相关内容