Bash 下载大于一定大小的文件
我有Files.txt,它由Excel文件的URL列表组成:Bash 下载大于一定大小的文件,bash,perl,shell,web-scraping,web-crawler,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_Check
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。例如,卷头http://www.bcheadset.ca/fte.xlsx 返回
从内容长度,我们可以验证它是否大于10Mo
我的问题是如何通过Bash或Perl实现自动化。特别是我不知道如何提取内容长度并进行比较
有人能帮忙吗?您可以使用LWP和perl发送HEAD请求,获取响应头。大概是这样的:
#!/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,而不是您想要的文件头 为了适应各种HTTP形式及其内容,某些类型的模式匹配可能是谨慎的。下面是如何在shell中使用全局匹配来完成此任务的一个粗略示例:
#!/bin/sh
BUFFER=$(curl --head http://www.bcheadset.ca/fte.xlsx )
HOLD=""
TAKENEXT=0
for i in $BUFFER
do case "$i" in
Content-Length:)
TAKENEXT=1
;;
*) if [ "$TAKENEXT" -eq 1 ]
then HOLD="$i"
break
fi
;;
esac
done
printf "SIZE was: %s\n" "$HOLD"
下面是一个使用grep的简单方法:
.这至少有两种情况:因为$BUFFER中的i需要进行路径名扩展,而Content Length:可能会作为另一个键的字段出现在头中的任何位置……此外:grep | awk通常不是一个好主意:awk'/^Content Length:/{print$2;exit;}将是更好的替代方法。顺便说一下,冒号后面的空格是可选的,所以$2可能有效,也可能无效。。。
#!/bin/sh
BUFFER=$(curl --head http://www.bcheadset.ca/fte.xlsx )
HOLD=""
TAKENEXT=0
for i in $BUFFER
do case "$i" in
Content-Length:)
TAKENEXT=1
;;
*) if [ "$TAKENEXT" -eq 1 ]
then HOLD="$i"
break
fi
;;
esac
done
printf "SIZE was: %s\n" "$HOLD"
SIZE=$(curl --head http://www.bcheadset.ca/fte.xlsx | grep 'Content-Length:' | awk '{print $2}')
printf "%s\n" "$SIZE"