2017-04-13 4 views
0

私のコードでは、(openSSHを使って)ホストに行き、パターンに一致するファイルのリストを取得し(リモートfindコマンドを使用してOpenSSHを実行します)、それぞれ(グレープなど)。 私はファイル名を取得し、関数に渡すことで完了です。さて、私はこれらのファイル名を、それぞれを開いて処理する関数に渡さなければなりません。リモートホスト上のファイルを読む

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... 

しかし、私はエラーを取得していますホストAN上のファイルを開くことができません:私は次のようにファイル:: Remoteを使用してそれを実行しようとしています。

+0

あなたはどんな問題を抱えていますか? – AbhiNickz

+0

それはファイル/ Remote.pmを見つけることができないと言います – emma

+0

あなたはFile :: remote perlモジュールを設定しましたか? – RAFA

答えて

0

リモートアクションをバッチで実行する場合、最初の原則はssh接続の数を減らすことです(理想的には1つだけです)。シェルまたはperlの1つのライナーを使用すると、非常に複雑なアクションを実行できます。

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

これ以上の処理は同じ行にパイプすることができます。ファイルをローカルで処理する場合は、すべてのファイルを1つのコマンドで転送できます。以下は完全な例です:

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

File :: Remoteモジュールは、標準のPerlインストールの一部ではありません。このモジュールを使用する場合は、インストールする必要があります。

インストール方法は、使用しているプラ​​ットフォームとPerlのインストール方法によって異なります。 Debian/Ubuntuベースのシステムでsudo apt-get install libfile-remote-perl(RedHatベースのシステムの場合)sudo yum install perl-File-Remoteを試してみてください。また、cpanまたはcpanmを使用してインストールすることもできます。

また、このモジュールが2005年に最後に更新されたので、それは維持されていない可能性が高いので、私はそれを使用することには注意が必要です。