私はLinuxが初めてです。特定の日付範囲で日付を印刷して保存するにはどうすればよいですか。
たとえば、 startdate=2013-03-01 と enddate = 2013-03-25 があります。その範囲内のすべての日付を印刷したい。
前もって感謝します
日付が YYYY-MM-DD 形式である限り、それらを辞書式に比較し、date
最初に秒に変換せずにカレンダー計算を行うことができます。
startdate=2013-03-15
enddate=2013-04-14
curr="$startdate"
while true; do
echo "$curr"
[ "$curr" \< "$enddate" ] || break
curr=$( date +%Y-%m-%d --date "$curr +1 day" )
done
では、入力リダイレクト演算子との混乱を避けるため[ ... ]
に をエスケープする必要があります。<
これには、開始日が終了日よりも大きい場合、開始日を印刷するという疣贅があります。
「最近」の日付が必要な場合の代替手段は次のとおりです。
echo {100..1} | xargs -I{} -d ' ' date --date={}' days ago' +"%Y-%m-%d"
明らかに、任意の日付範囲では機能しません。
date
日付を秒に変換し、少し計算して元に戻すために使用します。
#/bin/bash
dstart=2013-03-01
dend=2013-03-25
# convert in seconds sinch the epoch:
start=$(date -d$dstart +%s)
end=$(date -d$dend +%s)
cur=$start
while [ $cur -le $end ]; do
# convert seconds to date:
date -d@$cur +%Y-%m-%d
let cur+=24*60*60
done
man date
日付パラメーターの詳細については、を参照してください。