2012-03-31 143 views
0

我正在为Y-m-d.pdf格式的文件写一个简单的批量下载器。我想通过时间(从,到)作为参数,如:在Mac OS shell脚本中使用日期

./download.sh 2012-01-01 2012-01-31

这应该下载的所有文件。2012年1月

这是我走到这一步:

#!/bin/bash 

for i in {0..9} 
do 
    curl -u user:pw http://server/path/somescript.pl?date=`date -v-"$i"d +%Y-%m-%d` -o `date -v-"$i"d +%Y-%m-%d`.pdf 
done 

此下载十个最近的文件。

编辑:我该如何迭代一系列日期呢?喜欢的东西:

for d in {2012-01-01..2012-03-31} 

我希望的是内置的功能,否则我也需要照顾天在每个月的数量(不要忘记闰年)自己。

+0

你的问题到底是什么? – Matthias 2012-03-31 07:48:33

+0

我只想出如何修改相对于当前日期的日期(例如date -v 10d),但我希望能够获取开始日期和结束日期之间的所有日期。换句话说,我如何迭代一系列日期? – martin 2012-04-01 08:00:08

回答

1

下图显示了基本的想法,你必须把curl的东西,在自己:

START=`date -j -f %Y-%m-%d:%H.%M $1:0.0 +%s` 
END=`date -j -f %Y-%m-%d:%H.%M $2:0.0 +%s` 
for ((i=$START; i<=$END; i+=86400)); do # seconds/day 
    echo `date -j -f %s "$i" +%Y-%m-%d` 
done; 

如果你打电话它:

> ./range 2012-1-30 2012-2-4 
2012-01-30 
2012-01-31 
2012-02-01 
2012-02-02 
2012-02-03 
2012-02-04 
+0

只需加上秒钟即可前往第二天,这太聪明了!非常感谢。奇迹般有效。 – martin 2012-04-07 14:29:30

1

可以使用[01-31]下载文件范围:

$ curl -u user:pw 'http://server/path/somescript.pl?date=2012-01-[01-31]' -o '2012-01-#1.pdf' 
+0

谢谢,我不知道这个功能。它使事情变得容易很多,但它不能解决一般情况,其中日期分布在数月甚至数年(并且必须处理不同月份的不同天数)。 – martin 2012-04-01 08:03:40

+0

你可以乘以''/'{...}'和'-o'#1_#2'' – kev 2012-04-01 08:06:04

+0

'date = 2012- [01-12] - [01-31]' - o'2012-#1-#2.pdf'我知道,但这是怎么处理的事实,有一个2012-01-31,但没有2012-02-31? – martin 2012-04-01 08:12:04