按月循环访问 bash 中的最小和最大日期



生成从最小和最大日期值输出%Y-%m*字符串的最简单方法是什么?我能够从我的文件系统中获取最小和最大日期

ST_DT=${6-`hdfs dfs -ls  /filepath/key=* | head -2 | tail -1 | cut -d '/' -f6 | cut -d '=' -f2`}
EN_DT=${5-`hdfs dfs -ls /filepath/key=* | tail -1 | cut -d '/' -f6 | cut -d '=' -f2`}

这确实给了我例如:

2018-01-01
2018-03-07

我希望能够生成: 2018-01*......2018-02*......2018-03*......等

最终答案感谢@anubhava:

while [[ $(date +%s -d $i) -le $endt ]]; do
   yr=`date --date "$i" +%Y`
   mth=`date --date "$i" +%m`
   echo "$yr-$mth*"
   i=$(date '+%Y-%m-%d' -d "$i +1 month")
done
您可以使用以下

gnu date 来使用此 shell 循环:

ST_DT='2018-01-01'
EN_DT='2018-03-07'
endt=$(date '+%s' -d "$EN_DT")
i="$ST_DT"
while [[ $(date +%s -d $i) -le $endt ]]; do
   echo "${i%-*}*"
   i=$(date '+%Y-%m-%d' -d "$i +1 month")
done

2018-01*
2018-02*
2018-03*

最新更新