从远程服务器获取文件并将数据附加到本地服务器文件中

时间:2020-07-07 18:42:09

标签: perl ssh sftp

我有一个脚本,可以将文件从远程计算机获取到本地计算机,如果本地计算机中已经存在文件,则将数据追加到现有文件中。

以下代码:该代码使用Net::SFTP::Foreign Perl模块。

.
.
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::OpenSSH perl模块进行相同的操作。

以下脚本:

.
.
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;
.

但是这里将文件从远程服务器放到本地服务器时会覆盖现有文件。如何通过将Net::SFTP::Foreign的值设置为overwrite并将0设置为append来修改在放置文件时应该执行与1相同的操作的脚本scp_put

1 个答案:

答案 0 :(得分:1)

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

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