2014-05-09 2 views
-1

URL에서 수천 개의 파일을 다운로드하고 싶습니다. "FileName.txt"의 각 행에는 다운로드 할 파일의 이름이 들어 있습니다. Perl 스크립트를 사용하여 "FileName.txt"에서 파일 이름을 가져 와서 임의의 시간 후에 다운로드합니다. 나는 몇 가지 초기 파일이 아닌의 출력을 얻고있다URL에서 일괄 다운로드

#!/usr/bin/perl 
$file1=$ARGV[0]; 
open(FP1, $file1); 
while($s1=<FP1>) 
<br> 
{ chomp ($s1); 
    $range = 5; 
    $minimum = 3; 

    $random_number = int(rand($range)) + $minimum; 
    `wget --wait="$random_number" "http://URL=$s1"`; 
} 

program.pl

A 
B 
C 
B 


파일 이름 .txt "파일 이름 .txt ./program.pl"로 스크립트를 실행 나머지 파일은 나머지 파일 $ 이맥스를 들어 "[13] 29699를"나는 점점 오전 왜 친절하게 말해 줄 수

[13] 29699 

을주고, 어떤 임의의 시간 간격 후 파일을 다운로드 할 수있는 가장 좋은 방법은 fileD.txt. 죄송합니다. while에있는 프로그램에 올바른 처리기가 표시되지 않습니다. 감사합니다

답변

0

$id의 출처는 표시하지 않지만 아마 일부 URL은 프로세스를 배경으로 둔 &을 포함하고있을 것입니다. wget의 인수에는 작은 따옴표를 사용하거나 system의 목록 양식을 사용해야합니다.

또한 wget의 wait 매개 변수는 wget 자체를 사용하여 주어진 URL에서 링크를 트래버스하는 경우에만 관련이 있습니다. 귀하의 경우에, 당신은 당신의 Perl 스크립트가 각 URL에 대한 호출 wget을 사이에 잠을해야합니다

#!/usr/bin/env perl 

use strict; 
use warnings; 

use constant WAIT_MINIMUM => 3; 
use constant WAIT_RANGE => 5; 

my ($url_list_file) = @ARGV; 
defined($url_list_file) 
    or die "Need URL list\n"; 

open my $fh, '<', $url_list_file 
    or die "Cannot open '$url_list_file': $!"; 

while (my $url = <$fh>) { 
    $url =~ s/\R\z//; 
    my @cmd = (wget => 'http://$url'); 

    print "@cmd\n"; 
    my $error = system @cmd; 

    if ($error) { 
     warn "''@cmd' failed: $?"; 
    } 
    sleep WAIT_MINIMUM + rand(WAIT_RANGE); 
} 
+0

이 필요하거나 간단한와 함께'LWP :: Simple'을 사용하는 것 같다' – Borodin

+0

가 미안 해요, 난 $ (S1)에 $ ID를 수정 한 sleep'. 제안에 감사드립니다. – firoz

0

URL= 무엇을 의미? wget은 url을 간단한 매개 변수로 사용합니다. 당신이

`wget --wait=$random_number 'http://$s1'`;