有没有一种方法可以检查是否有指向目录的符号链接?

时间:2020-03-06 14:24:57  来源:igfitidea点击:

我的服务器上有一个文件夹,我有许多符号链接指向该文件夹。此后,我创建了一个新文件夹,并且想要更改所有这些符号链接以指向新文件夹。我曾考虑过用新链接的符号链接替换原来的文件夹,但是如果我继续这种做法,看来很快就会变得非常混乱。

我一直在做的是手动更改符号链接以指向新文件夹,但是我可能错过了一些。

有没有一种方法可以检查是否有指向特定文件夹的符号链接?

解决方案

我会使用find命令。

find . -lname /particular/folder

这将递归地在当前目录中搜索到/ particular / folder的符号链接。请注意,它将仅找到绝对符号链接。可以使用类似的命令来搜索所有指向称为"文件夹"的对象的符号链接:

find . -lname '*folder'

从那里,我们将需要清除所有误报。

find / -lname 'fullyqualifiedpathoffile'

对于硬链接,我们可以使用" ls"选项之一获得目录的索引节点(我认为是" -i")。

然后用-inum的find会找到所有常见的硬链接。

对于软链接,我们可能必须对所有文件执行" ls -l",以在"->"之后查找文本并将其标准化以确保其为绝对路径。

实际上,没有任何直接方法可以检查此类符号链接。考虑到我们可能有一个并非一直挂载的文件系统(例如,外部USB驱动器),其中可能包含到系统上另一个卷的符号链接。

我们可以执行以下操作:

for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder

我注意到FreeBSD的find不支持-lname选项,这就是我结束上面的原因的原因。

除了查看所有其他文件夹(如果有指向原始文件夹的链接)之外,我认为这是不可能的。如果是这样,我会很感兴趣。

find . -type l -printf '%p -> %l\n'