列出具有多个硬链接的所有文件及相关路径

列出具有多个硬链接的所有文件及相关路径

如何列出所有具有硬链接和相关路径的文件?

它应该是一个按 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':仅打印inodefile 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 的回答寻找使用它的解决方案。

相关内容