当たり前なんだけど、File::Copyを使うよりcpを使ったほうが全然仕事が速い。ってことで、いつもやってるヤツでcpがどこにあるかをprobe:
my @cmds = qw(cp); # 他にrmとかも欲しければ・・・
my @paths = qw(/usr/local/bin /usr/bin /bin);
my %commands;foreach my $cmd (@cmds) {
foreach my $path (@paths) {
my $fullpath = File::Spec->catfile($path, $cmd);
if (-x $fullpath) {
$commands{$cmd} = $fullpath;
last;
}
}
}
これでやっとくと、/bin/cpだろうが/usr/bin/cpだろうがOK。もちろん、トロイの木馬だったら目も当てられませんが・・・。で、こいつを使って、
sub copy_file
{
my($from, $to) = @_;my $cmd = $commands{cp};
if ($cmd) {
system($cmd, $from, $to);
} else {
require File::Copy;
File::Copy::copy($from, $to);
}
}
で一丁上がり。