Вы можете переименовать файлы перед обходом каталога.
find({
preprocess => sub {
for (@_) {
my $oldname = $_;
$_ = lc;
s/\s/_/g;
rename $oldname => $_;
}
return @_;
},
wanted => sub {
print "$File::Find::name was already renamed\n";
},
},
@dirs
);
Или вы можете отложить переименование до тех пор, пока не произойдет обход.
finddepth(sub {
print "in $File::Find::dir, renaming $_\n";
my $newname = lc;
$newname =~ s/\s/_/g;
rename $_ => $newname;
},
@dirs
);
Проблема, с которой вы сталкиваетесь, заключается в том, что
find
находит каталог "Abc Def"
find
звонки wanted("Abc Def")
rename "Abc Def" => "abc_def"
find
пытается ввести "Abc Def"
, который больше не существует
так что все под не обрабатывается