1

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 ) };?这似乎效率低下且容易出错。

4

2 回答 2

0

该错误是预期的,请忽略它。

关于您的文件被传输到/whatever/whatever,我无法重现该问题,至少使用 Net::SFTP::Foreign 的开发版本

设置时会得到什么$Net::SFTP::Foreign::debug = 2|4|64|4096|8192|32768

于 2012-03-02T09:45:20.053 回答
-1

源应为 ./*,目标应为 ./。

my ( $source, $dest ) = ('/whatever/*','/whatever/');

我希望这行得通。

于 2012-03-02T08:07:15.897 回答