我是一个 perl 新手,所以请耐心等待。
我正在寻找一种在 OS X 中递归遍历文件夹的方法,并遇到了这个解决方案:如何遍历目录中的所有文件...
我稍微修改了 perreal 的答案(见下面的代码),以便我可以在参数中指定搜索文件夹;即我改变my @dirs = (".");
了我的@dirs = ($ARGV[0]);
但由于某种原因,这不起作用——它会打开文件夹,但不会将任何子目录识别为文件夹,除了“。” 和'..',所以它实际上从未超出指定的根。
如果我主动指定了文件夹(例如 \Volumes\foo\bar),它仍然不起作用。但是,如果我返回my @dirs = (".");
然后坐在我想要的文件夹 (foo\bar) 中并从它自己的文件夹 (foo\boo\script.pl) 调用脚本,它就可以正常工作。
这是“预期”的行为吗?我错过了什么?!
非常感谢,
垫
use warnings;
use strict;
my @dirs = (".");
my %seen;
while (my $pwd = shift @dirs) {
opendir(DIR,"$pwd") or die "Cannot open $pwd\n";
my @files = readdir(DIR);
closedir(DIR);
foreach my $file (@files) {
if (-d $file and ($file !~ /^\.\.?$/) and !$seen{$file}) {
$seen{$file} = 1;
push @dirs, "$pwd/$file";
}
next if ($file !~ /\.txt$/i);
my $mtime = (stat("$pwd/$file"))[9];
print "$pwd $file $mtime";
print "\n";
}
}