如何在Linux上查找所有基本上是其他目录或文件的软链接或硬链接的文件?

16

我该如何获取系统中或特定目录中所有链接文件的列表?我曾经创建过链接,但随着时间推移它们变得难以管理。我想要从一个目录中获取所有这样的链接列表。有人可以帮忙吗?


1
我认为这属于 Serverfault。 - Gabriel Sosa
4
不是服务器故障...这里与服务器或网络无关...这是 superuser.com 网站。 - Juliano
4个回答

29

找到符号链接很容易:

% find . -type l

查找硬链接很棘手,因为如果一个目录的子目录也有子目录,那么这些会增加硬链接计数。这就是UNIX中子目录与其父目录相连的方式(在每个子目录中都有一个..条目)。

如果你只想查找链接的文件(而不是目录),那么这将起作用:

% find . -type f \! -links 1

这样可以运行是因为一个拥有硬链接的文件会有超过1的链接计数,而一个未链接的文件的链接计数等于1,因此该命令查找所有链接计数不等于1的文件

或者,在较新版本的find上,您也可以使用以下命令:

% find . -type f -links +1

这个也可以工作的原因和上面相同;但是,新版本的find命令可以使用+n或-n代替一个数字。这相当于测试是否大于n或小于n。


嗯...一个文件可以有小于1个链接吗?我的意思是,那不会使它成为无文件索引节点吗? - naught101
@naught101 嗯,提供-1确实无法找到任何文件。 - Alnitak

3
find / -xdev -samefile filename

2

@OP,如果您有GNU find,则可以使用-printf“%n”查找硬链接,例如:

find /path -type f -printf "%f/%n/%i\n" | while IFS="/" read filename num_hlinks inum
do
 echo "Filename: $filename. Number of hard links: $num_hlinks, inode: $inum"
 # if 2 or more files have the same inode number, then they are hard links. 
 # you can therefore count how many $inum that are the same and determine those hard links, which 
 # you have to try doing yourself.
done

1

非常感谢!这正是我正在寻找的——如何找到哪些其他文件实际上与我正在查看的文件相同。 - cb2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接