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

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, всегда срабатывает on_error rput, а ошибка $ sftp-> равна «Удаленный каталог» / что бы там ни было »

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

Это обходной путь, если сделать его до rput, но на самом деле я не хочу удалять каталог назначения:

$sftp->rremove( $dest );

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

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

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

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

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

0 голосов
/ 02 марта 2012

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

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

Надеюсь, это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...