我需要创建本质上是带有前缀yp_
和后缀的日期戳.log
以及经过操纵的日期数字的日志文件:
$ touch yp_$(echo "$(date +%Y%m%d)-10" | /usr/bin/bc -l).log
$ ls
yp_20150912.log # ... ok for today's date.
对于今天来说这还好,但是当日期数字介于 01 和 10 之间时,一切都会变得很糟糕。结果不能再被解释为日期戳。
例如,假设日期是 2016 年 3 月 8 日,即“20160308”。我该如何编写上述代码,以确保减去 10 天会产生不是'20150298' 但 '20150227' ?还用 19820103 测试你的答案......
- 我在看man date
。
——apropos date
喷出了 161 条我也审查过的结果。
有人能帮忙解释一下这句话吗?
答案1
我需要操作日期(同时注意闰年)
幸运的是,GNU date
有一个非常便利 -d
选项:
-d, --date=STRING display time described by STRING, not 'now'
(从man date
)
这接受任意日期描述,例如“现在 + 1 年”“1 月 28 日 + 3 周”;或者在您的情况下:“现在 - 10 天”:
touch yp_$(date -d 'now - 10 days' +%Y%m%d).log
不需要混乱的调用bc
,也不用担心闰年——GNUdate
会处理它。
答案2
要显示今天之后 x 天的格式化日期:
$ echo $(date +%Y%m%d)
20150922
$ echo $(date -d -10days +%Y%m%d)
20150912
$ echo $(date -d +10days +%Y%m%d)
20151002