2012-03-07 2 views
1

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

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"; 
    } 
    } 
+0

Что не входит в код с кодом выше? Это ошибка? Не дают желаемых результатов? – DVK

+0

Как бы вы сделали это в локальной системе с 'find'? –

+0

Возможно, вы можете обратиться http://stackoverflow.com/questions/2282686/how-to-echo-directories-contain-matching-file-with-bash вопрос для команды –

ответ

1

Используйте поиск с Exec.

Просто:

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



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

} 
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 в удаленном хосте будет быстрее.

Смежные вопросы