如何在Shell脚本中进行日期计算?

8

我有一个shell脚本,每晚运行用来备份我的EC2站点的数据库和HTML文件到S3,在备份文件夹的末尾添加日期以便更容易查看。但我还希望能够删除之前3天的备份文件夹。如何计算出3天前的日期?

#!/bin/bash
DATE=`date +%m%d%Y`

s3cmd put -r /var/lib/mysql/mydb/ s3://mybucket/mydb-$DATE/
s3cmd put -r /home/ec2-user/public_html/ s3://mybucket/public_html-$DATE/
s3cmd del -r s3://mybucket/mydb-(date 3 days ago)
3个回答

13
您可以使用date命令的-d标志:
-d, --date=STRING
     display time described by STRING, not 'now'

所以,只需将您的日期变量更改为:

DATE=`date +%m%d%Y -d "3 days ago"`

谢谢!我以为我需要使用awk或其他工具。 - Phuah Yee Keat
这里是已识别格式的列表:https://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html - moritz

2
为什么不使用目录的修改时间呢?然后你可以使用 find 命令直接搜索它们。例如:
find backups -maxdepth 1 -mtime 3

1

在BSD / Mac上有所不同。您需要使用-v选项:

date -v -3d +%m%d%Y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接