perl - 为什么 File::Find 不处理我损坏的符号链接(symbolic link)?

标签 perl symlink file-find

我正在使用 Perl 的 File::Find 模块来扫描文件、目录和链接。除此之外,我希望我正在编写的实用程序能够报告损坏的(用 File::Find 的说法来说是悬而未决的)符号链接(symbolic link)。理论上,这是通过创建一个在发现损坏链接时调用的子例程来支持的,并使用适当值的哈希引用调用 find 方法,例如:

my %options = (
   wanted            => \&ProcessFile,
   follow            => 1,
   follow_skip       => 2,
   dangling_symlinks => \&Dangling
);

find(\%options, @ARGV);

尽管故意创建一个断开的链接来测试这一点,File::Find 从未调用子例程Dangling。除了这个功能之外,其他一切都有效,即 ProcessFile 子程序按预期调用,跟踪链接等。

最佳答案

在我的主目录中创建了test.pl:

#!/usr/bin/perl

use File::Find;

my %options = ( wanted => \&ProcessFile,
                follow => 1,
                follow_skip => 2,
                dangling_symlinks => \&Dangling );

find(\%options, @ARGV);

sub ProcessFile {
  print "ProcessFile ($File::Find::name in $File::Find::dir)\n";
}

sub Dangling {
  my ($name, $dir) = @_;
  print "Dangling ($name in $dir)\n";
}

然后:

    $ chmod 755 test.pl

    $ mkdir /tmp/findtest
    $ cd /tmp/findtest
    $ ln -s /tmp/doesnotexist linkylink
    $ ~/test.pl .

结果:

ProcessFile (. in .)
Dangling (linkylink in ./)
ProcessFile (./linkylink in .)

关于perl - 为什么 File::Find 不处理我损坏的符号链接(symbolic link)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686934/

相关文章:

windows - 我如何在 Perl 中使用 Control D?

perl - File::Find 是否有更简洁的方法来返回所需文件的列表?

Perl XML::Simple 解析器解码不一致

perl - 如何读取文件并用名称替换值

ios - iOS 自定义框架中的符号链接(symbolic link)损坏

ruby - 使用 'require' 和符号链接(symbolic link)时的路径问题

perl - 用 Perl 从网络驱动器读取文件

python - 如何从 Python 读取 Perl 数据结构?

shell - 在 ubuntu 上创建符号链接(symbolic link)时,我有时会得到一个奇怪的结果