![列出具有多个硬链接的所有文件及相关路径](https://linux22.com/image/999898/%E5%88%97%E5%87%BA%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E7%A1%AC%E9%93%BE%E6%8E%A5%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%8F%8A%E7%9B%B8%E5%85%B3%E8%B7%AF%E5%BE%84.png)
如何列出所有具有硬链接和相关路径的文件?
它应该是一个按 inode ID 排序的列表。
编辑:当然,我的意思是所有硬链接数> = 2 的文件
我想到了一个像这样的列表
INODE_ID FILEPATH
1234 /tmp/test1
1234 /tmp/test2
3245 /tmp/test4
3245 /tmp/test3
答案1
这是我的解决方案find
:
find . -links +1 -type f -name '*' -printf '%i %p\n' | sort
.
:在当前目录中搜索,您可以将其更改为其他任何内容,例如:/
,,~/ravexina
等等。-links +1
:仅限具有多于 1 个链接(>= 2)的文件。-type f
:仅文件(不是目录、符号链接、管道文件等)。-name '*'
:名称中包含任何内容的所有文件,无论其名称是什么。-printf '%i %p\n'
:仅打印inode
,file path
并换行\n
。sort
:根据 inode 对行进行排序。
答案2
好的,那样的话也许
for i in /tmp/**; do
[[ -f "$i" ]] &&
(( $(stat -c %h "$i") > 1 )) &&
stat -c '%i %n' "$i"
done | sort -V
笔记
for i in *
对于当前目录中的每个文件[[ -f "$i" ]] &&
如果它是一个常规文件,并且(( $(stat -c %h "$i") > 1 ))
如果有多个硬链接stat -c '%i %n'
打印其 inode 编号和名称| sort -V
并“自然地”对输出进行排序
您可以*
用文件路径替换,例如,/tmp/*
这将导致打印完整路径。如果您想递归搜索,您可以在路径中使用,shopt -s globstar
例如**
/tmp/**
find
有一个-links
测试,但是它似乎只接受一个整数你必须阅读Ravexina 的回答寻找使用它的解决方案。