我正在寻找一种稀释旧备份的方法。备份每天运行,我想在备份变旧时增加间隔。
几天之后,我想删除每日备份,只留下“星期日”备份。几周后,只应删除一个月的第一个备份。
由于我正在处理历史备份,我不能只改变命名方案。
我尝试使用'find',但找不到合适的选项。
任何人都有可能有所帮助吗?
答案 0 :(得分:4)
我知道这是历史数据,但您可能更愿意提出一个命名方案来帮助解决这个问题。在两个过程中解决这个问题可能要容易得多:首先,根据日期重命名目录,然后选择将来保留的目录。
如果ls -l
输出中的所有目录日期都足够好,您可以快速进行近似:
ls -l | awk '{print "mv " $8 " " $6;}' > /tmp/runme
查看/tmp/runme
,如果看起来不错,可以使用sh /tmp/runme
运行它。您可能希望修剪条目或类似的东西,由您决定。
如果所有备份都存储在名为的目录中,例如:
2011-01-01/
2011-01-02/
2011-01-03/
...
2011-02-01/
2011-02-02/
...
2011-03-07/
然后你的问题将减少到计算要保留和删除的名称。这个问题比搜索所有文件并尝试根据它们的制作时选择要保留和删除的文件要容易得多。 (有关生成此类名称的快速方法,请参阅date "+%Y-%m-%d"
输出。)
一旦方便地命名,您可以使用以下脚本保留每个月的第一个备份:
for y in `seq 2008 2010`
do for m in `seq -w 1 12`
do for d in `seq -w 2 31`
do echo "rm $y-$m-$d"
done
done
done
保存输出,检查它:)然后运行输出,类似于重命名脚本。
一旦您控制了过去的备份,您就可以从2010
生成date --date="Last Year" "+%Y"
,以及其他改进,以便它在当月处理“每周一次”并永久保持自己前进。
答案 1 :(得分:1)
是的,例如
find -type f -mtime 30
详情 - http://www.gnu.org/software/findutils/manual/html_mono/find.html#Age-Ranges
答案 2 :(得分:1)
我已经在@ ajreal的起点上为我的类似需求开发了一个解决方案。我的备份命名为" backup-2015-06-01T01:00:01" (使用date "+%Y-%m-%dT%H:%M:%S"
)。
两个简单的步骤:触摸文件以保持每个月的第一个使用shell glob模式,并使用find
和xargs
删除超过30天的任何内容。
cd $BACKUPS_DIR
# touch backups from the first of each month
touch *-01T*
# delete backups more than 30 days old
echo "Deleting these backups:"
find -maxdepth 1 -mtime +30
find -maxdepth 1 -mtime +30 -print0 | xargs -0 rm -r