bash - 下载大于一定大小的文件

标签 bash perl shell web-scraping web-crawler

我有 Files.txt,其中包含 Excel 文件的 URL 列表:

http://www.bcheadset.ca/applicant.xlsx
http://www.bcheadset.ca/fte.xlsx
http://www.iutox.org/TRTF_Matrix2012_Oct.xlsx
http://www.journalprices.com/2013_FinalSummaryForWeb.xlsx
http://www.camts.org/7__2013_Aircraft_Checklist.xlsx
http://www.nanotr11.org/poster_program.xlsx
http://www.vliruos.be/media/6352100/nss2015_annex_3_budget.xlsx
...

我想做的是下载(通过wget)大于10Mo的文件。

要在下载之前验证文件是否大于 10Mo,我们可以使用 curl --head。例如,curl --head http://www.bcheadset.ca/fte.xlsx 返回

HTTP/1.1 200 OK
Content-Length: 3158847
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Last-Modified: Mon, 27 Jul 2015 22:16:45 GMT
Accept-Ranges: bytes
ETag: "ffb49fecb9c8d01:c05"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Tue, 06 Oct 2015 15:14:27 GMT

Content-Length 中,我们可以验证它是否大于 10Mo

我的问题是如何通过一段 BashPerl 自动执行此操作。特别是我不知道如何提取 Content-Length 并进行比较...

有人可以帮忙吗?

最佳答案

您可以使用 LWPperl 并发送 HEAD 请求,获取响应 header 。像这样的事情:

#!/usr/bin/env perl
use strict;
use warnings;

use LWP;
use Data::Dumper;

my $request = HTTP::Request -> new ( HEAD => 'http://www.google.com' ); 
my $agent = LWP::UserAgent -> new;
my $response = $agent -> request ( $request );
print $response -> header ( 'Content-Length'); 

然后使用 LWP 执行 GET 而不是您想要该文件的 HEAD

关于bash - 下载大于一定大小的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32973928/

相关文章:

bash - 可以在 Bash 函数中本地更改 IFS 吗?

linux - 如何在bash中创建仅包含十六进制字符而不包含空格的文件的十六进制转储?

Perl 为使用任意数量的模块和库的脚本生成一个可执行文件

linux - 在 Linux 中查找多个文件并重命名它们

bash - xargs -l 的替代品

javascript - PHP 在 HTML 中显示实时 Shell 输出

linux - 在获取 .bashrc 后,如何在使用 ssh 登录时在远程执行命令?

perl - 根据特定列对 CSV 进行排序?

html - perl 子程序输出附加 "1"

linux - acquia服务器上的shell脚本调度