在目录中仅保留一定数量的备份(tarball)

在目录中仅保留一定数量的备份(tarball)

在我的 debian 9.4 机器上,我有一个脚本,可以自动压缩和备份 srv/ 中的所有文件,日期名称为 xx-xx-xxxx.tar。它已移至我的 backups/ 目录。

我想将文件夹中 .tar 文件(备份)的数量限制为 10 个,并在每次创建新 tar 时删除最旧的 .tar 文件。

解决这个问题的最佳方法是什么?这是我的脚本:

#!/bin/bash
#Purpose = Backup of Important Data
#Created on 17-1-2012
#Author = Hafiz Haider
#Version 1.0
#START
TIME=`date +%b-%d-%y`            # This Command will add date in Backup File Na$
FILENAME=backup-$TIME.tar.gz    # Here i define Backup file name format.
SRCDIR=/srv/daemon-data                    # Location of Important Data Directo$
DESDIR=/backups           # Destination of backup file.
tar -cpzf $DESDIR/$FILENAME $SRCDIR 
#END

答案1

在脚本末尾添加以下内容:

find "$DESDIR/$FILENAME" -type f -mtime +10 -delete

这将在目录中找到您的备份文件 (tar.gz),并删除 10 天以上的所有备份。

答案2

如果您有 zsh 可用,您可以使用它来补充您的 bash 脚本:

# ...
tar -cpzf "$DESDIR"/"$FILENAME" "$SRCDIR" 
zsh -c 'rm -- "$DESDIR"/backup-*-tar.gz(om[11,-1])'

这里的意思是要求带着文件列表来zsh调用;rm该文件列表是从通配符$DESDIR/backup-*-tar.gz(我从您的脚本中收集的并添加了引号)生成的,后面是括号中的 zsh“glob 限定符”。该 glob 限定符表示o按修改时间“rder”(排序)匹配文件m(最新的在前);然后对该列表进行切片,仅选择第 11 个及以后的文件,然后将其删除,留下 10 个最新文件。该-1语法的意思是“从列表末尾向后计数”,并且有效地引用列表的最后一个元素。

答案3

时间间隙正是这样做的。

Timegaps 是一个跨平台的命令行程序。它根据每个项目的年龄和用户给定的时间分类规则,将一组项目分为拒绝和接受的项目。

时间间隙允许减少项目集合,而接受的项目之间的时间间隙随着项目年龄的增加而变得更大。这对于实施备份保留策略非常有用,其目标是保持备份在时间上“对数”分布,例如过去 24 小时中每一小时一个、过去 30 天中每一天一个、过去 8 周中每一周一个,以及很快。

答案4

您需要与系统实用程序使用相同的逻辑对数旋转(8),可以配置为保留最大数量的文件。在用户空间中,有许多类似 logrotate 的实用程序,如本答案中所述:https://superuser.com/a/868519

话虽如此,一个简单的配置文件就像

"/home/coolman/backups" {
    rotate 10
}

应该使用命令行

/usr/sbin/logrotate -s $HOME/backups.state -f $HOME/backups.config

相关内容