Macos 在Mac OS外壳脚本中使用日期

Macos 在Mac OS外壳脚本中使用日期,macos,bash,shell,Macos,Bash,Shell,我正在为文件编写一个简单的批处理下载程序,其格式为Y-m-d.pdf。我想将日期(从、到)作为参数传递,例如: ./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-

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

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

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

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

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

下面展示了基本的想法,你必须自己把
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;  

你的问题是什么?我只知道如何修改相对于当前日期的日期(例如日期-v 10d),但我希望能够获得开始日期和结束日期之间的所有日期。换句话说,我如何迭代一系列日期?谢谢,我不知道这个功能。它使事情变得容易多了,但它不能解决一般情况,即日期分布在多个月甚至几年内(不同月份的天数必须不同)。您可以使用乘法
[…]
/
{…}
-o'#1#2'
'date=2012-[01-12]-[01-31]-o'2012-[1-\352.pdf',我知道,但是,这是如何处理的事实,有一个2012-01-31,但没有2012-02-31?只是增加秒到第二天,这是聪明的!谢谢。工作起来很有魅力。
> ./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