2017-04-13 1 views
0

내 코드는 (openSSH로 수행하는) 호스트로 이동하여 패턴과 일치하는 파일 목록을 얻고 (원격 찾기 명령 -UserSSH를 사용하여 수행) 각 파일을 열어서 처리합니다 각 (grepping etc). 파일 이름을 가져 와서 함수에 전달하는 것으로 끝났습니다. 이제는이 파일 이름을 각각 열어서 처리하는 함수에 전달해야합니다.원격 호스트에서 파일 읽기

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

하지만 호스트에서 파일을 열 수 없습니다 생각하는 I 오류가 점점 오전 : 나는 파일을 사용하여 수행 할 :: 원격 다음과 같이 노력하고 있습니다.

+0

어떤 문제가 있습니까? – AbhiNickz

+0

그것은 말합니다 File/Remote.pm을 찾을 수 없습니다 – emma

+0

File : remote perl 모듈을 구성 했습니까? – RAFA

답변

0

원격 작업을 일괄 적으로 수행 할 때 첫 번째 원칙은 ssh 연결 수를 줄이는 것입니다 (이상적으로는 하나만). 셸 또는 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"; 
} 
0

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 년에 마지막으로 업데이트되었으므로 유지 관리가되지 않을 가능성이 높습니다. 따라서이 모듈을 사용하는 것을 조심해야합니다.