在Mac OS shell脚本中使用日期

时间:2012-03-31 07:43:27

标签: macos bash shell

我正在为文件编写一个简单的批量下载程序,其格式为Y-m-d.pdf。我想将日期(from,to)作为参数传递,例如:

./ 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}

我希望有一个内置功能,否则我需要照顾每个月的天数(不要忘记闰年)。

2 个答案:

答案 0 :(得分:2)

以下显示了基本想法,您必须自己填写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

答案 1 :(得分:1)

您可以使用[01-31]下载一系列文件:

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