我想从网上下载数千个文件。 “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"`;
}
我收到少量初始文件的输出但不是剩余文件的输出。对于剩余文件$ emacs fileD.txt给出
[13] 29699
你能不能告诉我为什么我得到“[13] 29699”,以及在随机时间间隔后下载文件的最佳方法是什么。抱歉,while的程序没有显示正确的处理程序。感谢
答案 0 :(得分:0)
您不会显示$id
来自哪里,但可能有些网址包含&
,这会将流程置于后台。您应该使用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);
}
答案 1 :(得分:0)
URL=
的含义是什么? wget
将url作为简单参数。似乎是你需要的
`wget --wait=$random_number 'http://$s1'`;