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/');
Я надеюсь, что это работает.