2012-03-31 5 views
0

私はY-m-d.pdfという形式のファイル用の単純なバッチダウンローダを作成しています。私は、日付(へ、から)をパラメータとして渡すなどをしたい:Mac OSシェルスクリプトで日付を使用する

./download.sh 2012年1月

のすべてのファイルをダウンロードする必要があります2012-01-31

2012-01-01ここで

は、私がこれまでに得たものです:

#!/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 

これは10の最新のファイルをダウンロードします。

EDIT:どのようにして日付の範囲を反復処理できますか?何かのように:

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

私は期待していた組み込み機能、そうでない場合、私は自分自身を(うるう年を忘れないように)各月の日数の世話をする必要があります。

+0

あなたの質問は何ですか? – Matthias

+0

私は、現在の日付(例えば、日付-v 10d)に関連して日付を変更する方法を考え出しましたが、開始日と終了日の間のすべての日付を取得できるようにしたいと考えています。言い換えると、どのようにして日付の範囲を繰り返すことができますか? – martin

答えて

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

1

YOUは、ファイルの範囲をダウンロードする[01-31]を使用することができます。

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

ありがとう、私はこの機能について知りませんでした。それは事をもっと簡単にしますが、それは複数の月または年にまたがる日付(そして、異なる月の異なる日数を処理しなければならない)という一般的なケースを解決するものではありません。 – martin

+0

'[...]'/'{...}'と '-o '#1_#2'' – kev

+0

'date = 2012- [01-12] - [01-31]'を乗算することができます。 o '2012-#1-#2.pdf'私は知っていますが、2012-01-31はあるが2012-02-31はないという事実をどうやって処理していますか? – martin

関連する問題