由于缺乏壳牌知识,我不完全确定如何做到这一点。
NOW=$(date +"%Y.%m.%d.%T") tar czf /backups/web_backup_$NOW.tgz /web/
你能帮我删除旧的备份,以便它只保留:
像这样的东西:(只是一个想法)
mkdir -p monthly mkdir -p weekly ln backup_$NOW.tgz weekly/ # find current month month=$(date +%Y-%m-) # find the first file of the current month in the weekly folder first_monthly=$(ls --sort=time -1 weekly/*$month* 2>/dev/null | tail -1) # and put it in the monthly folder ln -f $first_monthly monthly/ # we need only 5 weekly backups ls --sort=time -1 weekly/* 2>/dev/null | tail -n+6 >> /tmp/deletebackups.txt # we need only 5 monthly backups ls --sort=time -1 monthly/* 2>/dev/null | tail -n+6 >> /tmp/deletebackups.txt # delete the extra files #rm $(cat /tmp/deletebackups.txt) 2>/dev/null xargs --arg-file /tmp/deletebackups.txt rm
看看rsnapshot。 它可能会做你想要的东西。
如果您首先使用rsnapshot,它会即时执行适当的备份保留(它为您创build每小时,每天,每周,…快照的结构)。
如果您没有使用rsnapshot创build快照,或者已经拥有相当大的快照集合,并且事后想要精简它,请查看timegaps 。 它恰好devise了这个用例(简单实现备份保留策略)。 根据你的用例,你可以调用这样的时间间隔:
$ timegaps days3,weeks3,months3 *.tgz
然后,它会识别那些需要被拒绝的tgz文件(基于文件修改时间),并将其写入标准输出以供审查或进一步处理(非侵入式只读模式)。 Timegaps也可以 – --move
这些文件或直接或--move
它们。 如果需要的话,它可以从文件名parsing项目创build时间(查看帮助消息),而不是通过stat()
获取它。
免责声明:我是timegaps的作者。