我正在尝试获取参考文件的先前日期。
我尝试过的:
[rahul@testsrv]$ date +%F -r /tmp/ftpbkp.log
2013-08-27
[rahul@testsrv]$ date +%F -r /tmp/ftpbkp.log -d "1 day ago"
date: the options to specify dates for printing are mutually exclusive
Try `date --help' for more information.
答案1
警告说明:
$ date -r ~/a
Sun 28 Oct 23:12:00 GMT 2012
$ LC_ALL=C date -r ~/a
Sun Oct 28 23:12:00 GMT 2012
作为输出,date
以用户的本地格式输出日期。不过, -d
GNU的输入date
对格式更加挑剔:
$ date -d "$(date -r ~/a) - 1 day"
date: invalid date ‘Sun 28 Oct 23:12:00 GMT 2012 - 1 day’
将语言环境修复为 C 可解决该问题:
$ export LC_ALL=C
$ date -d "$(date -r ~/a) - 1 day"
Sun Oct 28 00:12:00 BST 2012
但请注意日期仍然是 2012 年 10 月 28 日,尽管现在是夏令时。那是因为在英国,距离该日期还有 24 小时,我们还在同一天。
现在,如果你想要前一天,你必须这样写:
date -d "$(date -r /tmp/file.ref +'%F -1 day')" +%F
答案2
LC_ALL=C date -d "$(LC_ALL=C date -r /tmp/ftpbkp.log) - 1 day" +%F
如果GNU 日期不可用:
perl -MPOSIX -le'
print strftime("%Y-%m-%d", localtime +(stat shift)[9] - 24*60*60)
' /tmp/ftpbkp.log
答案3
date -r /tmp/ftpbkp.log +%s | awk '{print strftime("%F", $1 - (24*60*60) );}'
答案4
该-d
选项用于指定与当前时间不同的时间。您要求命令根据格式date
格式化文件的最后修改时间,此外您还传递了由选项指定的另一个时间。这些选项是互斥的。但如何组合它有一个技巧:/tmp/ftpbkp.log
%F
-d
date -d "`date -r /tmp/ftpbkp.log`" - 1 day"