Linux date命令的加减运算
Linux上的date
命令可以用来查看当前的日期和时间,但我们也可以使用该命令进行加减运算来扩展其功能。例如,我们可以看到五天前、五年后等的日期和时间,而不是当前日期。这里的可能性是无限的。
这在许多情况下都很有用。一个这样的例子是,当您创建备份时,您可以使用date
命令为文件分配一个日期名称,甚至可以使用一些减法运算来删除较旧的备份。我们将在下面介绍这个具体示例,以便您可以看到它的实际效果,但正如您可以想象的那样,还有更多情况下它会很方便。
在本指南中,您将看到涉及加法和减法的各种 date
命令示例。您可以在自己的系统或自己的脚本中随意使用这些命令来熟悉该命令。
在本教程中您将学习:
日期命令算术和减法示例
Linux 上日期命令的加法和减法示例
日期算术和减法示例
让我们从一个基于 date Linux 命令的简单备份命令开始:
$ tar cjf linuxconfig_$(date +%H%M-%d%m%Y).tar.bz2 ~/public_html
我们通常不想无限期地保留所有备份文件,或者直到它们耗尽所有可用的可用空间。这就是使用 Linux date 命令进行减法运算变得方便的地方。让我们看几个示例,了解如何使用日期字符串从当前日期中减去时间。从当前日期减去 10 年:
$ date Tue Jul 13 21:12:52 EDT 2021 $ date --date="10 years ago" +%H%M-%d%m%Y 2112-13072011
从当前日期减去 3 个月:
$ date Tue Jul 13 21:13:47 EDT 2021 $ date --date="3 months ago" +%H%M-%d%m%Y 2113-13042021
从当前日期减去 255 天:
$ date Tue Jul 13 21:14:17 EDT 2021 $ date --date="255 days ago" +%H%M-%d%m%Y 2114-31102020
从当前日期减去 32 周:
$ date; date --date="32 weeks ago" +%H%M-%d%m%Y Tue Jul 13 21:15:10 EDT 2021 2015-01122020
从当前日期减去小时和分钟:
$ date; date --date="5 hours ago" +%H%M-%d%m%Y Tue Jul 13 21:16:01 EDT 2021 1616-13072021
您可能会猜到,我们遵循相同的格式从当前日期减去分钟:
$ date; date --date="5 minutes ago" +%H%M-%d%m%Y Tue Jul 13 21:16:45 EDT 2021 2111-13072021
我们现在可以改进简单的备份脚本,只保留不超过 6 个月的文件:
#!/bin/bash tar cjf linuxconfig_$(date +%H%M-%d%m%Y).tar.bz2 ~/public_html rm linuxconfig_$(date --date="6 months ago" +%H%M-%d%m%Y).tar.bz2
使用 date 命令进入未来就像进入过去一样简单。需要做的就是在每个日期字符串前面添加“-”(减号)符号。例如,您可以要求 date 命令将 12 小时添加到当前日期和时间:
$ date; date --date="-12 hours ago" +%H%M-%d%m%Y Tue Jul 13 21:17:56 EDT 2021 0917-14072021
在某些 Unix 系统上,上述日期语法可能不可用。在本例中,这里作为一个简单的示例,说明如何使用纪元时间执行上述所有操作。纪元时间只是自“1970 年 1 月 1 日 00:00:00”以来的秒数。因此,使用世界时间的纪元时间“1”为:
$ date -ud@1 Thu Jan 1 00:00:01 UTC 1970
让我们看看如何使用纪元时间从当前日期减去 2 周、3 天和 23 秒。由于这是 1,468,823 秒前,因此计算结果如下:
$ date;echo `date --universal +%s` - 1468823 | bc Tue Jul 13 21:19:37 EDT 2021 1624756754
唯一剩下要做的就是转换输出。将时间回显为通用人类可读日期格式:
$ date -ud@1624756754 Sun Jun 27 01:19:14 UTC 2021
要添加 2 周、3 天和 23 秒,请使用相同的过程,但使用加法而不是减法:
$ date;echo `date --universal +%s` + 1468823 | bc Tue Jul 13 21:22:13 EDT 2021 1627694556
转换纪元时间:
$ date -ud@1627694556 Sat Jul 31 01:22:36 UTC 2021
结束语
在本指南中,我们了解了如何在 Linux 上通过 date
命令使用加法和减法算术。这有很多应用程序,其中之一就是带有时间戳的文件名,正如我们在上面的示例中看到的那样。无论您选择使用纪元时间还是正常时间和日期,Linux 都允许您快速计算任意日期值并将这些变量分配给文件名或您可能拥有的任何其他用途。