有没有一种方法可以检查是否有指向目录的符号链接?
时间: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'