'附加' Net :: SFTP :: Foreign-> get()中的选项未按预期工作

时间:2016-02-23 04:34:34

标签: perl file sftp

我将文件从远程机器复制到本地,此操作每天执行一次。如果在远程文件内容中追加内容,我只会将附加的内容复制到本地文件(因为它已经存在于本地机器上)。我正在使用CPAN的Net :: SFTP :: Foreign模块,但似乎是在附加的情况下复制完整的文件(这是不期望的)。

use strict;
use warnings;

use Net::SFTP::Foreign;

my $file = '/home/user/temp/test.txt';
my $destination = '/home/user/dest.txt';

my $sftp = Net::SFTP::Foreign->new(
   host      => 'localhost',           # using localhost for destination and source
   more      => [ -o => 'Compression yes', '-v' ]
);

$sftp->get( $file, $destination, copy_perm => 1, append => 1 );

if($sftp->error) {
  print "get operation failed for $file : " . $sftp->error . "\n";
}

我检查了Net / SFTP / Foreign.pm模块的get()实现,并在附加的情况下找到了下面的代码片段 -

my $flags = Fcntl::O_CREAT|Fcntl::O_WRONLY;
$flags |= Fcntl::O_APPEND if $append;
$lstart = sysseek($fh, 0, 1) if $append;

如果是append,$ lstart只包含0,它是文件的开头。我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

感谢您的评论,实际上我找到了它无法正常工作的原因。它一直用远程文件覆盖本地文件。 但是当我使用下面的代码时:

$sftp->get(
    $file,
    '/home/user/test.log',
    append    => 1,
    overwrite => 0,
);

现在它不会覆盖文件,而是将整个文件附加到本地文件。 虽然我想只是添加添加到远程文件而不是整个文件的文本。 Net :: SFTP :: Foreign不支持此功能。