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

'append' option in Net::SFTP::Foreign->get() is not working as expected

我正在将文件从远程机器复制到本地并且这个操作每天执行一次。如果在远程文件内容中附加内容,我只会将附加内容复制到本地文件(因为它已经存在于本地机器上)。我正在使用来自 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;

在追加的情况下,$lstart 仅包含 0,即文件的开头。我在这里遗漏了什么吗?

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

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

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

不支持此功能