代码之家  ›  专栏  ›  技术社区  ›  Eric

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

  •  4
  • Eric  · 技术社区  · 14 年前

    在PHP或Perl中,有没有找到指向当前文件的所有符号链接的方法?

    4 回复  |  直到 14 年前
        1
  •  7
  •   Ether    14 年前

    不需要遍历文件系统来查找所有符号链接,然后检查它们的目标,不需要。但是如果您仍然想这样做,就很简单了:

    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;
        },
        '/'
    );
    
        2
  •  4
  •   cHao    14 年前

    如果不遍历文件系统或使用 find (它自己也会在FS上行走)。符号链接实际上并没有以任何有意义的方式链接到文件;它们只是包含到真实文件的路径。这些链接可以在任何地方,并且在路径中使用之前,操作系统不一定知道它们。

        3
  •  2
  •   Alan Geleynse buhbang    14 年前

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

    符号链接(至少在linux中)基本上是指针。它们从一个位置指向另一个位置,但是如果不进行彻底的搜索,它们指向的位置就无法知道指向它的是什么。

        4
  •  2
  •   Gordon Haim Evgi    14 年前

    在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());
        }
    }