我的服务器上有一个文件夹,我有许多符号链接指向。我已经创建了一个新文件夹,我想更改所有这些符号链接以指向新文件夹。我考虑用符号链接替换原始文件夹到新文件夹,但似乎如果我继续这种做法,它可能会很快变得非常混乱。
我一直在做的是手动更改符号链接以指向新文件夹,但我可能错过了一对。
有没有办法检查是否有指向特定文件夹的符号链接?
答案 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()
为您提供了一个易于使用的迭代器,用于遍历所有子目录内容,同时还检测此类符号链接递归。
大多数命令行工具使用这个函数来为他们处理这种情况。那些不经常遇到符号链接递归问题的人,因为“手动”执行此操作很困难(任何知道它的人都应该改用上述函数)。