用于压缩父文件夹中的新文件夹的脚本

用于压缩父文件夹中的新文件夹的脚本

我正在使用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 执行

相关内容