将Perl脚本转换为ssh并重命名文件
我对perl脚本非常陌生,我想要的是从服务器A ssh csv文件,并在传输后重命名它们 服务器 A:/dirA/DIAMETER\u请求\uw+.csv==>传输到服务器B:/dirB/ 然后在服务器中重命名它们 A:/dirA/DIAMETER\u请求\uw+.csv==>服务器 A:/dirA/DIAMETER\u请求\uw+.csv.old 我已经成功地重命名了它们,但我不知道如何添加ssh选项 非常感谢您的帮助将Perl脚本转换为ssh并重命名文件,perl,Perl,我对perl脚本非常陌生,我想要的是从服务器A ssh csv文件,并在传输后重命名它们 服务器 A:/dirA/DIAMETER\u请求\uw+.csv==>传输到服务器B:/dirB/ 然后在服务器中重命名它们 A:/dirA/DIAMETER\u请求\uw+.csv==>服务器 A:/dirA/DIAMETER\u请求\uw+.csv.old 我已经成功地重命名了它们,但我不知道如何添加ssh选项 非常感谢您的帮助 #!/bin/perl # @result = ();
#!/bin/perl
#
@result = ();
open (IN_FILE, "/dirA/DIAMETER_Requests_\w+.csv$") ||
die ("ERROR: Cannot open file '/dirA/DIAMETER_Requests_\w+.csv$': $!\n");
while (defined ($line = <IN_FILE>))
{
push (@result, $line);
}
close (IN_FILE);
open (OUT_FILE, ">/dirA/DIAMETER_Requests_\w+.old.csv$") ||
die ("ERROR: Cannot create file '/dirA/DIAMETER_Requests_\w+.old.csv$': $!\n");
print OUT_FILE join ("", @result);
close (OUT_FILE);
# The end
exit (0)
#/bin/perl
#
@结果=();
打开(在文件“/dirA/DIAMETER\u请求\uw+.csv$”中)||
die(“错误:无法打开文件“/dirA/DIAMETER\u请求\uw+.csv$”:$!\n”);
while(已定义($line=))
{
推送(@result$line);
}
关闭(在_文件中);
打开(输出文件“>/dirA/DIAMETER\u请求\uw+.old.csv$”)||
die(“错误:无法创建文件“/dirA/DIAMETER\u请求\uw+.old.csv$”:$!\n”);
打印出_文件连接(“,@result”);
关闭(输出文件);
#结局
出口(0)
您可以使用执行此操作,无需首先在远程服务器上复制然后重命名文件:
use strict;
use warnings;
use Net::OpenSSH;
my $host = 'user@some.domain.com';
my $ssh = Net::OpenSSH->new($host);
$ssh->error and
die "Couldn't establish SSH connection: ". $ssh->error;
$ssh->scp_put("DIAMETER.csv", "DIAMETER.old.csv")
or die "scp failed: " . $ssh->error;
my $async = 1;
$ssh->disconnect( $async );
我认为您可以使用这个内置于perl for FTP的模块,轻松实现您想要的功能。下面的代码也取自Net::FTP的文档
要访问SFTP服务器,只需看看perl的模块。即使是作为perl开发人员,我的建议是为此使用“bash”。试着通过“bash scp file with rename”找到一些东西。我认为当perl给您模块时,您不应该使用系统命令来轻松完成所有这些。如果您使用诸如scp之类的系统模块,并且如果有人错误地更新了这些模块,您的程序可能会停止工作。我建议使用Net::FTP模块。您还没有重命名任何内容。您在这里所做的是以一种相当低效的方式将旧文件的内容复制到新文件。也许没有人向您展示过Perl的功能。另外,您真的有一个名为
DIAMETER\u Requests\uw+.csv
的文件吗?在我看来,\w+
表示这是一个定义文件名格式的正则表达式。我正在使用公司开发的内部工具传输文件,我为该文件名添加了一个通用正则表达式。因此,“w”
use Net::FTP;
$ftp = Net::FTP->new("some.host.name", Debug => 0)
or die "Cannot connect to some.host.name: $@";
$ftp->login("anonymous",'-anonymous@')
or die "Cannot login ", $ftp->message;
$ftp->cwd("/pub")
or die "Cannot change working directory ", $ftp->message;
$ftp->get("actual_file_name","filename_to_be_changed")
or die "get failed ", $ftp->message;
$ftp->quit;