读取远程主机上的文件

Posted

技术标签:

【中文标题】读取远程主机上的文件【英文标题】:Reading a file on a remote host 【发布时间】:2017-09-09 05:18:03 【问题描述】:

我的代码涉及到主机(使用 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...

但我无法在主机上打开文件,出现错误。

【问题讨论】:

您遇到了什么问题? 它说 Can't locate File/Remote.pm 你配置 File::remote perl 模块了吗? @RAFA 我在我的代码中包含了 。我还必须做其他事情吗?抱歉,我是 perl 新手。 @emma 你需要使用 cpan 配置 File::remote perl 模块。 【参考方案1】:

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

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";

【讨论】:

【参考方案2】:

File::Remote 模块不是标准 Perl 安装的一部分。如果你想使用这个模块,那么你需要安装它。

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

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

【讨论】:

以上是关于读取远程主机上的文件的主要内容,如果未能解决你的问题,请参考以下文章

检查远程主机上一个端口的状态[关闭]

python 随机远程主机修改密码

发送公钥到多台远程主机

如果在没有 ssh-ing 的情况下不存在远程主机上的目录,如何在它上创建目录?

Unix命令获取远程主机上的目录列表

如何通过远程桌面连接把文件复制到远程主机