【问题标题】:How to get difference a date greater than 6 calendar days in shell script如何在shell脚本中获取大于6个日历日的日期差异
【发布时间】:2017-04-17 06:27:48
【问题描述】:

我正在编写一个脚本来删除超过 5 天的数据,我创建了一个如下所示的 shell 来获取超过 5 天的日期。但现在是一个月的开始,现在它给出了 -ve 结果。有什么建议可以避免这种情况吗?

提前致谢。

    fi
DD=$(date +%d)
MM=$(date +%m )
YYYY=$(date +%Y)
DM=`expr $DD - 6 `

if [ "$DM" -lt 10 ]; then

问候, 拉维

【问题讨论】:

标签: shell


【解决方案1】:

我使用了以下语法并且效果很好。

day = $(date +%Y.%m.%d -d "6 days ago")

【讨论】:

    【解决方案2】:

    我不知道这是否有帮助,但使用 find 将删除目录中超过 5 天的所有文件

     find /path/to/directory/ -mindepth 1 -mtime +5 -delete
    

    【讨论】:

      【解决方案3】:

      正如 cmets 中所述,该工作的正确工具可能是 find,但另一种选择是在几秒钟内工作:

      now=$(date +%s)
      six_days_in_seconds=$(( 60 * 60 * 24 * 6 ))
      
      six_days_ago=$(( now - six_days_in_seconds ))
      

      如果你有 GNU 日期,那么你可以只传递一个字符串而不是自己进行计算:

      date --date '6 days ago' +%s
      

      如您所见,这两个选项给出相同的结果:

      printf 'First: %s\nSecond: %s\n' "$(( $(date +%s) - 60 * 60 * 24 * 6 ))" \
                                       "$(date --date '6 days ago' +%s)"
      First: 1480159605
      Second: 1480159605
      

      【讨论】:

      • 你也可以说date --date "6 days ago" "+%s"
      • @fedorqui 如果你有 GNU 日期,你可以,是的。编辑以包含该选项。
      • 我尝试了最后一个选项,但它在 Unix 时间中给出了 put 。我想知道日历月的一般日期。
      • 如果你有 GNU 日期并且使用-d '6 days ago',你可以指定你想要的格式。 %s 可以更改为您喜欢的任何格式字符串。
      猜你喜欢
      • 2011-03-24
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多