我有一个脚本backup.sh,它创build一个MySQL数据库的备份,然后SCP将它传送到远程服务器。 这很好,我可以使用crontab每天运行一次,没有任何问题。
但是,我只想存储最近30天的备份,否则几个月后我将拥有数百个冗余的SQL文件。 我真的不知道从哪里开始。 我能想到的唯一方法是有31个子文件夹,每个月的每一天,然后每天replace每个文件。 尽pipe如此,这还不够理想,而且感觉有点肮脏。
下面是我的backup.sh文件的内容,显然有一些关键信息被删除了:
#!/bin/bash today=`date +%Y-%m-%d.%H%M%S` mysqldump -u rails -p******** rails > backups/backup-$today.sql sshpass -p '********' scp backups/backup-$today.sql m***d@******.co.uk:custom_backups/backup-$today.sql
你可以在远程机器SSH? 如果是的话,你可以写脚本remover.sh
#!/bin/bash sshpass -p '********' ssh m***d@******.co.uk: "ls -t custom_backups/backup-*.sql | sed -n -e '31,1000 s#^#custom_backups/#p' | xargs rm -f"
怎么运行的?
ls -t custom_backups/backup-*.sql
列出按时间sorting的所有文件 – 最后最老的
| sed -n -e '31,1000 s#^#custom_backups/#p'
sed添加目录前缀( custom_backups/ )和打印(感谢p开关)只有线(文件名)从范围31到1000。
| xargs rm -f
xargs删除列出的文件。 -f开关保证如果列表为空即不会有错误。 你有30个或更less的备份文件。
只有在远程计算机上至less有30个备份的情况下,脚本才能删除最旧的文件
这里有很多示例scriptlet,显示了如何做到这一点,只是websearch“旋转备份”的例子。
另外,你可能至less有一个模板脚本在你试图做的机器上:大多数发行版都带有日志旋转function,你也可以在这些脚本中find灵感:-)
所以在crontab中查看是否有提到的日志旋转,或者检查你的操作系统的文档。
我为这个问题使用了两个解决scheme: