我该如何获取系统中或特定目录中所有链接文件的列表?我曾经创建过链接,但随着时间推移它们变得难以管理。我想要从一个目录中获取所有这样的链接列表。有人可以帮忙吗?
找到符号链接很容易:
% find . -type l
查找硬链接很棘手,因为如果一个目录的子目录也有子目录,那么这些会增加硬链接计数。这就是UNIX中子目录与其父目录相连的方式(在每个子目录中都有一个..
条目)。
如果你只想查找链接的文件(而不是目录),那么这将起作用:
% find . -type f \! -links 1
这样可以运行是因为一个拥有硬链接的文件会有超过1的链接计数,而一个未链接的文件的链接计数等于1,因此该命令查找所有链接计数不等于1的文件
或者,在较新版本的find
上,您也可以使用以下命令:
% find . -type f -links +1
这个也可以工作的原因和上面相同;但是,新版本的find命令可以使用+n或-n代替一个数字。这相当于测试是否大于n或小于n。
find / -xdev -samefile filename
@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
例如,在这里查看https://www.gnu.org/software/findutils/manual/html_node/find_html/Hard-Links.html,或者将Alnitak和amber_linux的答案结合起来,使用find -L /where/to/search -samefile /some/link/to/file
查找给定文件的所有硬链接和软链接。