如何使用 date 命令使用对文件的引用来获取先前的日期?

如何使用 date 命令使用对文件的引用来获取先前的日期?

我正在尝试获取参考文件的先前日期。

我尝试过的:

[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以用户的本地格式输出日期。不过, -dGNU的输入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"

相关内容