我正在使用Backup-Utils
应用程序备份我们的 GitHub Enterprise。此应用程序每晚运行并在备份目录中创建以下结构。
/backup/
20191201T000001/
20191202T000001/
20191203T000001/
etc...
如果可能的话,我想要执行的是运行一个cron
脚本,该脚本仅压缩由 创建的新文件夹Backup-Utils
。
例子:
第 1 天:我运行了一个脚本来压缩第一个文件夹(/backup/20191201T000001/
),我想要的是在第 2 天增加脚本来压缩新文件夹(/backup/20191202T000001/
),依此类推。
答案1
使用答案命令的解释(在答案的末尾):
我们将使用该date
命令,因为每个备份都命名为 YYYYMMDDT000001 :
date '+%Y%m%d'
为了定义哪个备份必须压缩,我们使用命令,并且同时find
使用选项来压缩它:-exec
find /backup -iname $(date '+%Y%m%d')T000001 -exec zip -r $(date '+%Y%m%d')T000001.zip $(date '+%Y%m%d')T000001 {} \;
该命令的进一步解释:
/backup
是你的备份文件夹-iname
要求find
命令搜索每个由其参数命名的目录/文件(这里是命令的结果date '+%Y%m%d'
)-exec
将执行命令并find
输出zip -r
将创建一个压缩文件,该文件将以结果命名,date '+%Y%m%d'
并以.zip
结果为扩展名(您可以定义绝对/相对路径,以便将压缩备份和备份文件夹分开),并且将要压缩的文件具有由date '+%Y%m%d'
命令定义的名称
例如,命令将像这样生成:
find /backup -iname 20191206T000001 -exec zip -r ../compress_backup/20191206T000001.zip 20191206T000001 {} \;
date '+%Y%m%d'
将返回20191206
,因此find
搜索20191206T000001
文件,并将其压缩到../compress_backup
文件夹(位于旁边/backup
)中,名称为20191206T000001.zip
回答命令:
现在,我们可以创建 cron 任务,每天运行一次(正如原帖在评论中,%
字符在 cron 命令中具有特殊含义 - 强制换行,这是我们不想要的 - 所以我们\\
每次都有字符来强制 cronjob 按照字面意思使用命令):
0 4 * * * find /backup -iname $(date '+\%Y\%m\%d')T000001 -exec zip -r $(date '+\%Y\%m\%d')T000001.zip $(date '+\%Y\%m\%d')T000001 {} \;
这将在每天凌晨 4:00 执行此命令,如评论,我们可以用这个命令删除超过 5 天的备份:
0 5 * * * find /backup/ -mindepth +1 -mtime +5 -delete
此命令将删除/backup
文件夹中超过 5 天的每个文件,并将于每天凌晨 5:00 执行