我有一个场景,我需要在包含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";
}
}
答案 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";
}
}