有没有办法检查是否有指向目录的符号链接?

我在我的服务器上有一个文件夹,我有一些符号链接指向。 我已经创build了一个新的文件夹,我想改变所有这些符号链接指向新的文件夹。 我曾考虑用一个符号链接replace原来的文件夹到新的文件夹,但似乎如果我继续这种做法,它可以非常快速地变得非常混乱。

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

有没有办法检查是否有任何指向特定文件夹的符号链接?

我会使用find命令。

find . -lname /particular/folder 

这将recursion地search当前目录中的符号链接到/particular/folder 。 请注意,它只会find绝对的符号链接。 可以使用类似的命令search指向名为“folder”的对象的所有符号链接:

 find . -lname '*folder' 

从那里你将需要消除任何误报。

您可以使用Mark Lord编写的symlinks程序审计符号symlinks – 它将扫描整个文件系统,将符号链接path规范化为绝对forms并将其打印到标准输出。

没有任何直接的方法来检查这种符号链接。 考虑一下你可能有一个没有被安装的文件系统(例如一个外部的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' 

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

 find / -lname 'fullyqualifiedpathoffile' 
 find /foldername -type l -exec ls -lad {} \; 

对于硬链接,你可以用“ls”选项之一来获得你的目录的inode( -i ,我想)。

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

对于软链接,您可能必须对“ – >”之后的所有查找文本的文件执行ls -l ,并对其进行规范化,以确保它是绝对path。