Shell 获取指定日期 N 天/月/年前(后)的日期

我们有时候在写批处理 Shell 脚本时,可能需要获取指定日期前(后) N 天/月/年的日期,这里的 N 可以是 1 天/月/年、2 天/月/年、3 天/月/年等等。方法其实很简单,这里做一个简单记录。基于这个语法,我们也可以写一个循环,将指定日期 N 天内的数据都做一个处理。

一、获取 N 天前(后)日期

首先是获取当前日期:

DATE=$(date +%Y%m%d)

这个命令就会将 DATE 赋值为 20190904,%Y%m%d 就是这个日期的格式,相应的还有 %Y%m(年月,如 201909),更多的可以自己搜一搜写法。

获取这个日期 N 天后的日期(${DATE} 可以换成任易日期,如 20190101):

DATE_TMP=$(date -d "${DATE} N days" "+%Y%m%d")

获取这个日期 N 前后的日期(${DATE} 可以换成任易日期,如 20190101):

DATE_TMP=$(date -d "${DATE} N days ago" "+%Y%m%d")

举个例子:

获取当前日期 1 天后的日期:

DATE_TMP=$(date -d "${DATE} 1 days" "+%Y%m%d")

获取当前日期 1 天前的日期:

DATE_TMP=$(date -d "${DATE} 1 days ago" "+%Y%m%d")

举一反三:

获取这个日期 N 月后的日期:

DATE_TMP=$(date -d "${DATE} N month" "+%Y%m%d")

获取这个日期 N 月前的日期:

DATE_TMP=$(date -d "${DATE} N month ago" "+%Y%m%d")

获取这个日期 N 年后的日期:

DATE_TMP=$(date -d "${DATE} N year" "+%Y%m%d")

获取这个日期 N 年前的日期:

DATE_TMP=$(date -d "${DATE} N year ago" "+%Y%m%d")

二、循环处理 N 天内数据

简单的一个处理指定日期 N 天内数据的 Shell 脚本写法:

DATE=$(date +%Y%m%d)
for i in {1..5}
do
    DATE_TMP=$(date -d "${DATE} ${i} days ago" "+%Y%m%d")
    cd /root/backup
    rm -rf *${DATE_TMP}*
done

基于这个脚本,再结合 Linux 的 crontab 命令(用法:Linux 利用 crontab 实现定时任务格式与用法简介),就可以实现例如每 7 天将当前日期 5 天内的数据删除。

给TA打赏
共{{data.count}}人
人已打赏
运维

Nginx的日志配置

2023-11-15 20:10:39

运维

解决 MacBook “FileZilla将对您的电脑造成伤害, 您应该将它移到废纸篓。”问题

2023-11-15 20:33:45

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索