如何找到指向给定目录中任何文件/目录的所有符号链接

Ant*_*llo 27 symlink

在这个问题上在这个问题(例如),您将获得有关如何查找指向给定目录的符号链接(我们称之为/dir1)的解决方案,而我对可能指向内部任何文件/文件夹的符号链接感兴趣/dir1

我想删除这样的目录,但我不确定这样做是否安全,因为在另一个目录上(我们称之为/dir2),我可能有指向/dir1.

此外,我可能使用绝对或相对路径创建了这些符号链接。我唯一的帮助是我知道我要检查的符号链接位于已挂载的文件系统上,位于/dir2.

Ant*_*hon 24

您可以使用以下方法找到所有符号链接:

find / -type l 
Run Code Online (Sandbox Code Playgroud)

您可能希望以 root 身份运行它,以便访问光盘上的每个位置。

您可以使用这些扩展readlink -f来获取链接的完整路径,并且您应该能够grep针对您正在考虑删除的目标目录输出:

find / -type l -exec readlink -f {} + | grep -F /dir2
Run Code Online (Sandbox Code Playgroud)

find / -type l -printf '%l\n'当您获得../tmp/xyz可能指向您的目标目录的相对链接时,使用不起作用,但由于它们未完全展开而未匹配。

  • 在子树的情况下,遵循符号链接可能很有用:`find -L /subtree -xtype l -exec readlink -f {} +` (2认同)
  • @Liam它告诉 find -exec 已完成,并且应该在“{}”位置将多个参数传递给命令(“readlink”)(您也可以用“;”结束(需要在许多 shell),用单个参数调用命令,这执行起来要慢得多。 (2认同)

小智 13

就我而言,接受的答案没有用(因为它没有输出链接源)。这对我有用。

我使用两个-exec子句解决了它:

find /home/ -type l -exec readlink -nf {} ';' -exec echo " -> {}" ';' | grep "/dir2"
Run Code Online (Sandbox Code Playgroud)

  • 这有效,但箭头 (->) 具有误导性,它应该从右指向左 (<-)。 (3认同)
  • 这不会翻转箭头,而是打印预期的输出:`find /home/ -type l -printf '%p -> ' -exec readlink -f {} ';' | grep“/dir2”` (3认同)