Perl найти файл на удаленной машине - PullRequest
1 голос
/ 07 марта 2012

У меня есть сценарий, в котором мне нужно перечислить все каталоги в msystem на удаленной машине, которая содержит log.txt. Если он найден, то получите список, используя ll command из файла каталога msystem. Как этого добиться? это структура каталогов

   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 ]

2 голосов
/ 07 марта 2012

Вы также можете сделать это, используя 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 голос
/ 07 марта 2012

Используйте find с exec.

Просто:

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



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

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...