读取远程主机上的文件

时间:2017-04-13 07:37:20

标签: perl unix ssh openssh remote-host

我的代码涉及到主机(使用openSSH),获取与模式匹配的文件列表(使用远程查找命令-OpenSSH),然后打开我获得的每个文件并处理每个文件(grepping等)。 我完成了获取文件名并传递给函数。现在,我必须将这些文件名传递给我打开每个文件名并处理它的函数。我试图使用File :: Remote进行如下操作:

sub processFiles{
    my $fileList =shift;
#Iterate over the file and try to find start and stop time stamps from the file
for my $file ( @{$fileList}) {
#finding start time of file:its found in lines of file
my $HEAD;
open $HEAD, "host:head -1000 $File|" or die "Unable to check file for starting time";
 while ( <$HEAD> ) {
 #process...

但是我无法在主机上打开文件而我收到错误。

2 个答案:

答案 0 :(得分:0)

批量执行远程操作时,第一个原则是减少ssh连接的数量(理想情况下只有一个)。使用shell或perl one liner,您可以执行非常复杂的操作。以下是我对您需求的理解:

ssh hostname 'find dirname -name \*.pl| xargs grep -l pattern /dev/null'

您可以在同一行中管道进一步处理。如果要在本地处理文件,可以在单个命令中传输所有文件。这是一个完整的例子:

use Archive::Tar;

open my $file, '-|', 'ssh -C hostname "find dirname -name \*.pl | xargs grep -l pattern /dev/null | xargs tar c"'
    or die "Can't pipe: $!";

my $tar = Archive::Tar->new($file);
foreach my $file ($tar->get_files()) {
    print $file->name, ', ', $file->size, "\n";
}

答案 1 :(得分:0)

File :: Remote模块不是标准Perl安装的一部分。如果要使用此模块,则需要安装它。

如何安装它取决于您使用的平台以及如何安装Perl。在使用系统Perl的Linux安装上,您可以尝试sudo yum install perl-File-Remote(在基于RedHat的系统上)或sudo apt-get install libfile-remote-perl(在基于Debian / Ubuntu的系统上)。您也可以尝试使用cpancpanm进行安装。

我还建议,由于这个模块最后一次更新是在2005年,很可能它没有维护,所以我会谨慎使用它。