如何找到当前文件的符号链接?

时间:2010-11-09 20:45:39

标签: php perl

在PHP或Perl中是否有办法找到当前文件的所有符号链接?

4 个答案:

答案 0 :(得分:7)

没有遍历文件系统寻找所有符号链接然后检查它们的目的地,没有。但如果你仍然想要这样做,那就非常简单了:

use strict;
use warnings;
use File::Find;

my $target = 'the filename you want to find links to';
finddepth(
    sub {
        return if not -l $File::Find::name;
        print "found $File::Find::name!\n" if readlink($File::Find::name) eq $target;
    },
    '/'
);

答案 1 :(得分:4)

不是没有走文件系统或使用find(它本身走FS)。符号链接实际上并没有以任何有意义的方式链接到文件;它们只包含真实文件的路径。这些链接可以在任何地方,并且操作系统不一定知道它们直到它们被用在路径中。

答案 2 :(得分:2)

不是没有搜索整个文件系统。

符号链接(至少在linux中)基本上是指针。它们从一个位置指向另一个位置,但是它们指向的位置无法在没有详尽搜索的情况下知道指向它的位置。

您可以通过完整搜索执行此操作,但根据您的系统,它可能很容易花费很长时间。

答案 3 :(得分:2)

在PHP中,您可以 - 理论上 - 使用RecursiveDirectoryIterator并将其设置为从文件系统根目录进行遍历。然后,您可以检查是否currently iterated filesystem item is a link,如果是,请使用readlink查看其指向的位置:

$fsi = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator('/'),
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($fsi as $fso) {
    if ($fso->isLink()) {
        echo readlink($fso->getPathname());
    }
}

实际上,您可能不会允许执行PHP脚本的用户执行此操作。