Perl在远程计算机上查找文件

时间:2012-03-07 05:39:19

标签: perl

我有一个场景,我需要在包含log.txt的远程机器上列出msystem下的所有目录。如果找到它,则从msystem目录文件中使用ll command获取列表。如何实现这一点 这是目录结构

   msystem
     dir1 dir2/info/log.txt dir3/ dir4/info/log.txt


  my $ssh = Net::SSH::Perl->new($hostname, protocol => '1,2', debug => 0, interactive => 1);
  $ssh->login($username, $password);
  ($stdout,$stderr,$exit) = $ssh->cmd("$check_lock_file");
  if((defined $stderr) && ($stderr =~ /No such file or directory/))
  {
     ($stdout,$stderr,$exit) = $ssh->cmd("What command to be used and get the ouput");
     if((defined $stderr) && ($stderr =~ /No such file or directory/))
     { 
                  print ""Error;
                  print "$stderr"; 
                   exit; 
     } 
     elsif($exit eq '0')
     { 
            print "dir2 dir4";
     }
  }

2 个答案:

答案 0 :(得分:2)

您也可以使用SFTP执行此操作:

use Net::SFTP::Foreign;
my $sftp = Net::SFTP::Foreign->new($hostname,
                                   user => $user, password => $password);
my @files = $sftp->find('/path/to/mysystem',
                        wanted => qr{^(?:.*/)?log\.txt$});
print "$_->{longname}\n" for @files;

但是,在远程主机中运行find会更快。

答案 1 :(得分:1)

使用find with exec。

简单地:

...$ssh->cmd("find mysystem/ -name "log.txt" -exec ls -la {} \\;");



 elsif($exit eq '0')
 { 
        foreach my $line (split(/\n/,$stdout)){
           print $line."\n";
        }

 }