脚本如何循环30天?

我有一个脚本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:

  1. 为每一天创build一个备份,如上所述。 问题是 – 你在这里不能有更旧的备份。
  2. 在目录中创build备份,然后 – 使用脚本 – 我保持(例如):
    • 最近30天的备份
    • 每个星期天不超过1年的备份
    • 从一个月的每一天备份
    • 一切 – 删除。