Linux 从URL批量下载
我想从一个URL下载上千个文件。“FileName.txt”中的每一行都包含要下载的文件名。我使用Perl脚本从“FileName.txt”中获取文件名,并在随机时间后下载它们。我以“/program.pl Filename.txt”的形式运行脚本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
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'`;