Bash 脚本需要将字符串转换为日期

Bash 脚本需要将字符串转换为日期

您好,我有这个用于检查备份完整性的 bash 脚本。我需要编辑它,因为当最旧的备份超过 60 天时(因为我们删除了这些备份),我必须让它发出警告。

现在日期是从另一个文件中提取的

OLDEST_DATE=`cat /tmp/B_BACKUP_TMP.out | head -1  | cut -f5,6,8 -d" "`

格式如下:

2018 年 10 月 29 日

但是,当我尝试使用 -mtime +60 时,无法识别此格式

有什么想法我可以如何转换它吗?

谢谢。

答案1

date命令在识别代表日期的字符串方面非常灵活。例如:

$ date -d 'Oct 29 2018'
Mon Oct 29 00:00:00 CET 2018

-d标志指示date将给定的日期显示为字符串。
您可以添加+FORMAT参数以根据需要转换日期。例如:

$ date -d 'Oct 29 2018' '+%Y-%m-%d'
2018-10-29

请参阅man date您必须设置输出格式的选项。

编辑:

抱歉,我没听懂你提到的-mtime。你指的是find过滤器吗?如果是的话,我想你需要知道今天和你的 之间的天数差OLDEST_DATE

您可以通过将日期转换为纪元格式(自 1970-01-01 00:00:00 UTC 以来的秒数)来获取它。例如:

$ current="$(date '+%s')"
$ oldest_date_epoch="$(date -d "$OLDEST_DATE" '+%s')"
$ diff_days=$(( ("$current" - "$oldest_date_epoch") / (3600 * 24) ))

请注意,这不是一个通用的解决方案,因为date听不懂外语

相关内容