如何在文件系统上找到所有硬链接文件?

hai*_*img 33 linux hardlink

我需要找到给定文件系统上的所有硬链接文件。例如获取文件列表,每行包含链接对或三元组等。

我或多或少了解如何做到这一点,需要为文件系统上的所有文件/目录创建一个由 inode 键控的字典,排除“。” 和“..”链接,然后有多个名称的 indodes 是硬链接...但我希望可能存在现成的解决方案,或者有人已经编写了这样的脚本。

Gil*_*not 30

您可以运行以下命令:

find / -type f -printf '%n %p\n' | awk '$1 > 1{$1="";print}'
Run Code Online (Sandbox Code Playgroud)

查找所有硬链接文件。

或@mbafford 版本:

find / -type f -links +1 -printf '%i %n %p\n'
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过使用 find 的 "-links +n' 语法来避免对 awk 的需求。例如,查找具有至少两个链接的所有文件并打印出必要的信息:`find / -type f -links +1 -printf '%i %n %p\n'` (23认同)

小智 18

find . -type f -links +1 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

给出具有多个链接的所有文件的列表,即存在硬链接的文件。循环这个相对容易 - 如果你没有那么多文件,一个hacky解决方案

for i in $(find . -type f -links +1 2>/dev/null); do find -samefile $i | awk '{printf "%s ", $1}'; printf "\n"; done | sort | uniq
Run Code Online (Sandbox Code Playgroud)

但我真诚地希望有更好的解决方案,例如让第一个find调用打印 inode 编号,然后使用find's-inum选项显示与此 inode 关联的所有文件。