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

时间:2008-09-19 07:08:42

标签: linux symlink

我的服务器上有一个文件夹,我有许多符号链接指向。我已经创建了一个新文件夹,我想更改所有这些符号链接以指向新文件夹。我考虑用符号链接替换原始文件夹到新文件夹,但似乎如果我继续这种做法,它可能会很快变得非常混乱。

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

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

9 个答案:

答案 0 :(得分:75)

我会使用find命令。

find . -lname /particular/folder

这将递归搜索当前目录的符号链接到/particular/folder。请注意,它只会找到绝对的符号链接。类似的命令可用于搜索指向名为“folder”的对象的所有符号链接:

find . -lname '*folder'

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

答案 1 :(得分:7)

您可以使用Mark Lord编写的the symlinks program审核符号链接 - 它将扫描整个文件系统,将符号链接路径规范化为绝对形式并将其打印到stdout。

答案 2 :(得分:5)

没有任何直接的方法来检查这样的符号链接。请考虑您可能有一个未始终挂载的文件系统(例如,外部USB驱动器),它可能包含符号链接到系统上的另一个卷。

您可以执行以下操作:

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

我注意到FreeBSD的find不支持-lname选项,这就是为什么我最终得到了上述内容。

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

find / -lname 'fullyqualifiedpathoffile'

答案 6 :(得分:1)

对于硬链接,您可以使用“ls”选项之一获取目录的inode(我认为-i)。

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

对于软链接,您可能需要在“ - >”之后的所有文件上查找文字ls -l并将其标准化以确保它是绝对路径。

答案 7 :(得分:1)

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

答案 8 :(得分:0)

致所有看这里的程序员(现在,cmdline 工具问题可能应该转至 unix.stackexchange.com):

您应该知道 Linux/BSD 函数 fts_open() 为您提供了一个易于使用的迭代器,用于遍历所有子目录内容,同时还检测此类符号链接递归。

大多数命令行工具使用这个函数来为他们处理这种情况。那些不经常遇到符号链接递归问题的人,因为“手动”执行此操作很困难(任何知道它的人都应该改用上述函数)。