Net::SFTP::Foreign - rput не выполняется (вроде), если целевой каталог существует

http://metacpan.org/pod/Net%3A%3ASFTP%3A%3AForeign

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 - это "Удаленный каталог" / что угодно "уже существует"

Несмотря на ошибку, rput продолжает и рекурсивно копирует dir, но на хосте taget он будет скопирован в / what, вместо over / what. то есть я в конечном итоге с / что угодно / что угодно.

Это служит неуклюжим обходным решением, если оно сделано до rput, но на самом деле я не хочу удалять каталог назначения:

$sftp->rremove( $dest );

У кого-нибудь есть идеи, что я делаю не так? Хотелось бы, чтобы мне лучше было перебрать все файлы, которые я хочу передать, а затем сделать foreach $file (@glob_result) { $sftp->put ( yada, yada) };? Это кажется неэффективным и подверженным ошибкам.

2 ответа

Решение

Эта ошибка ожидается, просто игнорируйте ее.

Что касается ваших файлов, передаваемых в /whatever/whateverЯ не могу воспроизвести эту проблему, по крайней мере с версией разработки Net::SFTP::Foreign.

Что вы получаете, когда устанавливаете $Net::SFTP::Foreign::debug = 2|4|64|4096|8192|32768?

Источник должен./* и пункт назначения./.

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

Я надеюсь, что это работает.

Другие вопросы по тегам