假设一个文件:如何有效地获取文件(包括目录类型)的所有别名的列表:
- 可以有多个硬链接、多个软链接、多级软链接
- 可能存在于安装在同一文件系统中另一个位置的目录下
- 可能存在于具有指向它的链接的目录下;再次具有 1 中提到的功能的链接
可能的解决方案是使用索引节点吗?
答案1
硬链接可以通过比较两者的inode号来识别和设备号(两个不同的挂载文件系统可能都有一个具有相同 inode 号的文件,但它们将具有不同的设备号)。您可以使用 手动读取设备/索引节点stat $file
,也find
可以使用 为您执行此操作-samefile
。您可以通过仅在同一设备内搜索来更有效地搜索硬链接:
find $fsroot/. -mount -samefile $myfile
软链接更难,因为它们可以位于任何地方。您需要取消引用它们来识别索引节点/设备。您可以使用以下命令手动执行此操作stat -L
或使用以下命令自动执行此操作find -L
:
find -L / -samefile $myfile
请注意,这将还找到硬链接。我认为没有find
一种简单的方法可以仅搜索指向特定索引节点的软链接。
某些文件系统可能可以更有效地告诉您此信息,但我认为在一般情况下您需要扫描每个文件。