Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从URL批量下载_Linux_Perl - Fatal编程技术网

Linux 从URL批量下载

Linux 从URL批量下载,linux,perl,Linux,Perl,我想从一个URL下载上千个文件。“FileName.txt”中的每一行都包含要下载的文件名。我使用Perl脚本从“FileName.txt”中获取文件名,并在随机时间后下载它们。我以“/program.pl Filename.txt”的形式运行脚本 Filename.txt A B C B program.pl #!/usr/bin/perl $file1=$ARGV[0]; open(FP1, $file1); while($s1=<FP1>) <br> { ch

我想从一个URL下载上千个文件。“FileName.txt”中的每一行都包含要下载的文件名。我使用Perl脚本从“FileName.txt”中获取文件名,并在随机时间后下载它们。我以“/program.pl Filename.txt”的形式运行脚本

Filename.txt

A
B
C
B
program.pl

#!/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"`;
}

您能告诉我为什么我会得到“[13]29699”,以及在随机时间间隔后下载文件的最佳方式是什么。很抱歉,位于while的程序未显示正确的处理程序。谢谢

您没有显示
$id
来自何处,但可能有些URL包含
&
,这将进程置于后台。对于
wget
的参数,应该使用单引号,或者使用的列表形式

此外,wget的wait参数仅在您使用wget本身来遍历来自给定URL的链接时才相关。在您的情况下,需要在为每个URL调用wget之间休眠Perl脚本:

#!/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);
}
#/usr/bin/env perl
严格使用;
使用警告;
使用常数WAIT_MINIMUM=>3;
使用常数WAIT_RANGE=>5;
我的($url\u list\u文件)=@ARGV;
已定义($url\u列表\u文件)
或死亡“需要URL列表\n”;

打开我的$fh,“什么意思
URL=
wget
将url作为简单参数。似乎是你需要的

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

或者将
LWP::Simple
与简单的
睡眠结合使用
对不起,我已将$id更正为$s1。谢谢你的建议。
`wget --wait=$random_number 'http://$s1'`;