在Perl中使用Net :: TFTP获取文件

时间:2018-03-14 13:18:41

标签: perl tftp

我希望我的代码执行以下操作:如果可以在服务器上找到某个文件,我想获取它并将其保存到文本文件中。如果找不到,我想保存到另一个文本文件。

我该怎么做?

这是我的代码:

#!/usr/bin/perl
use Net::TFTP;

my $server = "192.168.1.1";
my $file = "image.bin";

my $tftp = Net::TFTP->new("$server");
$tftp->octet;
$tftp->get("$file","$server-$file");

1 个答案:

答案 0 :(得分:0)

我的问题或所需的输出并不清楚。根据我对您的描述的理解,您需要在外部主机上搜索某些文件,如果存在则获取它们,如果不将它们添加到文件中。问题的一种可能方法可能是Net::SFTP::Foreign。在我的代码示例下,我只是搜索目录中的文件,如果我找到了我想要的文件,我将它们添加到一个数组中以便进一步处理。在您的情况下,您可以使用get或其他东西,阅读非常容易触及的模块文档。

代码示例:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Net::SFTP::Foreign;

my %args = ( host     => "127.0.0.1",
             user     => "user",
             port     => "22", # default 22
             # psw    => "psw", # uncomment if you are using passwords
             key_path => "/home/user/.ssh/id_rsa" ); # comment if you are using passwords

my $sftp = Net::SFTP::Foreign->new(%args);
$sftp->die_on_error("Unable to establish SFTP connection");

my $ls = $sftp->ls('/home/user/myTestDir/TestDir')
    or die "unable to retrieve directory: ".$sftp->error;

my @rest;
my @wanted;
for (@$ls) {
    next if (substr($_->{filename},0,1) eq "."); # skip ('.' and '..')
    if ($_->{filename} eq 'foo.txt'){
    push @wanted, $_->{filename};
    } else {
    push @rest, $_->{filename};
    }
}
print Dumper \@wanted, \@rest;

# do your stuff with the files

__END__

$ perl test.pl
$VAR1 = [
          'foo.txt'
        ];
$VAR2 = [
          'bar.txt'
        ];