首页 > 解决方案 > 从远程服务器获取文件并将数据附加到本地服务器文件中

问题描述

我有一个脚本,它从远程机器获取文件到本地机器,如果文件已经存在于本地机器中,则将数据附加到现有文件。

下面的代码:这使用Net::SFTP::ForeignPerl 模块。

.
.
my $remote_dir = "/REMOTE/MACHINE/PATH";
my $file        = "Report9_202007.txt";

my $local_dir   = "/LOCAL/MACHINE/PATH";

my $sftp = Net::SFTP::Foreign->new(host=>$host , user=>$user , password=>$pass);
$sftp->die_on_error("Unable to establish SFTP connection");

$sftp->put("$remote_dir/$file","$local_dir/$file", append=>1, overwrite=>0) or die "put failed:".$sftp->error;
$sftp->disconnect;
.
.

上面的脚本工作得很好。如您所见,我将报告的数据附加到现有文件中,而不是在本地机器中覆盖它..append=>1, overwrite=>0)

同样,我对其中一个 VM 上的 Perl 模块有一些依赖,所以我想使用Net::OpenSSHperl 模块进行相同的操作。

下面的脚本:

.
.
my $ssh = Net::OpenSSH->new($host,
                            user => $user,
                            password => $passwd
);
$ssh->error and die "Couldn't establish SSH connection: ". $ssh->error;
.
.
$ssh->scp_put({glob => 1}, "$remote_dir/$file", "$local_dir/$file")
        or die "scp failed: " . $ssh->error;
.

但是在这里,当它将文件从远程服务器放到本地服务器时,它会覆盖现有文件。如何通过将值设置为 as和as in来修改应该执行与Net::SFTP::Foreign放置文件时相同的操作的脚本?overwrite0append1scp_put

标签: perlsshsftp

解决方案


只要远程系统运行某种 UNIX,这应该可以解决问题:

open my $fh, '>>', $local_file or die $!
$ssh->system({stdout_fh => $fh}, cat => $remote_file) or die $ssh->error

推荐阅读