http://metacpan.org/pod/Net::SFTP::Foreign
my ( $user, $password, $host ) = @_;
my ( $source, $dest ) = '/whatever';
my $sftp = Net::SFTP::Foreign->new(
user => $user,
host => $host,
password => $password,
more => [ -o => 'StrictHostKeyChecking no' ]
);
$sftp->rput(
$source, $dest,
overwrite => 1,
on_error =>
sub { print $sftp->error; }
);
如果 $dest 在 $host 上存在,则 rput 的 on_error 总是会触发并且 $sftp->error 是“远程目录 '/whatever' 已经存在”
尽管有错误,rput 继续并递归地复制目录,但在 taget 主机上,它将被复制到 /whatever下,而不是/ whatever 上。即我最终得到/whatever/whatever。
如果在 rput 之前完成,这将作为一个简单的解决方法,但我实际上并不想删除目标目录:
$sftp->rremove( $dest );
有人知道我做错了什么吗?我最好将所有要传输的文件都通配起来,然后执行 foreach $file (@glob_result) { $sftp->put ( yada, yada ) };?这似乎效率低下且容易出错。