我正在使用 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/