find-samefile 并非 linux 标准命令,实为误称或第三方脚本;硬链接共享同一 inode,可用 find + awk 按 inode 分组识别,或用 fdupes -i、jdupes -i 等工具高效查找。

Find-Samefile 并不是 Linux 系统自带的标准命令,也未被主流发行版收录。你提到的 find-samefile 很可能是指某个第三方脚本(如早期 Debian/Ubuntu 中曾短暂出现过的 Perl 脚本),或与 fdupes、jdupes 混淆,又或是误记了 find 的功能。
硬链接的本质:共享同一 Inode
在 ext4/xfs/btrfs 等文件系统中,硬链接是多个目录项(dentry)指向同一个 inode 的关系。它们具有:
- 完全相同的 device + inode 编号(可通过
ls -i或stat查看) - 相同的 UID/GID、权限、mtime/ctime/atime、大小等元数据
- 删除其中一个不影响其他硬链接——只有当所有硬链接都被删掉,inode 引用计数归零时,数据块才真正释放
用标准 find + awk 找出所有硬链接组
无需额外工具,纯 shell 即可按 inode 分组列出全部硬链接路径:
find /path/to/search -xdev -type f -printf '%i %p\0' | \
awk -v RS='\0' '{inodes[$1] = inodes[$1] $2 "\0"} \
END {for (i in inodes) if (split(inodes[i], a, "\0") > 1) printf "%s", inodes[i]}' | \
tr '\0' '\n'
说明:
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
-
-xdev防止跨文件系统(因不同设备上 inode 可能重复) -
-printf '%i %p\0'安全输出 inode+路径,用空字符分隔避免含空格/换行符路径出错 -
awk按 inode 聚合路径,只输出出现次数 ≥2 的组 - 最终用
tr将 \0 转为换行便于阅读
更直观:用 stat + sort 分组查看
适合小范围手动检查:
find /path/to/search -xdev -type f -exec stat -c '%D:%i %n' {} + | sort
输出形如:
0801:12345678 /home/user/doc.txt0801:12345678 /home/user/backup/doc.txt
0801:98765432 /home/user/photo.jpg
相同 device:inode 前缀的行即属于同一硬链接组。
替代工具推荐(非必须但更友好)
若希望获得结构化结果或批量处理:
-
fdupes -i:加-i参数后按 inode 匹配(而非内容哈希),专用于找硬链接;fdupes -i -r /path即可 -
jdupes -I:jdupes是fdupes的现代增强版,-I启用 inode 模式,速度更快、内存更省 -
自定义脚本封装:把上面的 find+awk 命令写成函数放入
~/.bashrc,例如:alias findlinks='find "$1" -xdev -type f -printf ... | awk ... | tr "\0" "\n"'










