Net::SFTP::Foreign - rput falha (mais ou menos) se o diretório de destino existir

StackOverflow https://stackoverflow.com/questions/9526543

  •  15-11-2019
  •  | 
  •  

Pergunta

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; }
);

Se $dest existir em $host, o on_error do rput sempre dispara e $sftp->error é "O diretório remoto '/whatever' já existe"

Apesar do erro, o rput continua e copia recursivamente o diretório, mas no host taget ele será copiado sob /tanto faz, em vez de sobre /qualquer que seja.ou sejaEu acabo com / tanto faz / tanto faz.

Isso serve como uma solução alternativa, se feito antes do rput, mas na verdade não quero remover o diretório de destino:

$sftp->rremove( $dest );

Alguém tem alguma ideia do que estou fazendo de errado?Seria melhor agrupar todos os arquivos que desejo transferir e, em seguida, fazer um foreach $file (@glob_result) { $sftp->put ( yada, yada ) };?Isso parece ineficiente e propenso a erros.

Foi útil?

Solução

Esse erro é esperado, apenas ignore-o.

Em relação aos seus arquivos sendo transferidos para /whatever/whatever, não consigo reproduzir esse problema, pelo menos com o versão de desenvolvimento de Net::SFTP::Foreign.

O que você ganha quando define $Net::SFTP::Foreign::debug = 2|4|64|4096|8192|32768 ?

Outras dicas

A origem deve ./* e o destino ./.

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

Eu espero que isso funcione.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top