如何限制目录以保留一定数量的文件

时间:2015-07-01 02:55:22

标签: bash shell mysqldump database-backups mysql-backup

我每天都在倾倒一个mysql wordpress数据库作为备份。由于我不想在一年后以365个.sql文件结束,我认为只保留最近30天的转储文件是不错的。始终保留最后30个,并自动删除旧的,每天一个。

我希望将bash编程为cron作业的一部分。所以我已经有我转储的部分并将文件发送到备份服务器。我只需要添加计数并删除每天最旧的一个片段。

这是我得到的(用户名和pswd保存在.my.cnf文件中):

now=$(date +'%m-%d-%y')
mysqldump -h mysql.server.com my_database | gzip -9 > ${home}/dbBackups/db_backup.sql.gz
mv ${home}/dbBackups/db_backup.sql.gz ${home}/dbBackups/${now}_db_backup.sql.gz
scp ${home}/dbBackups/${now}_db_backup.sql.gz backup_user@backup.server.com:/home/backup_user/backup.server.com/dbBackups/

有没有人知道如何实现此功能?

3 个答案:

答案 0 :(得分:4)

打印超过30天的文件的标准命令是

find <full_path_to_your_dir> -type f -mtime +30 -print 

删除超过30天的文件的标准命令是

find <full_path_to_your_dir> -type f -mtime +30 -delete

上述命令将删除超过30天的所有文件。

答案 1 :(得分:1)

上面提到的find命令是最简单/最干净的解决方案。如果你想要你也可以做

old=$(date -d "30 days ago"  +'%m-%d-%y') 
rm ${home}/dbBackups/$"{old}"_db_backup.sql.gz

你需要确保没有办法搞砸你的路径。实际上$ {home}非常接近env var $ HOME,因此您可以考虑更改它。你也可以像这样编写一个简单的脚本来每天运行以从你scp他们的任何地方删除文件。

答案 2 :(得分:0)

你们都已经得到了额外的帮助。谢谢。

因此,我将尝试的版本1脚本将如下所示:

homePath="/home/myuser"
now=$(date +'%m-%d-%y')
mysqldump -h mysql.server.com my_database | gzip -9 > ${homePath}/dbBackups/db_backup.sql.gz
mv ${homePath}/dbBackups/db_backup.sql.gz ${homePath}/dbBackups/${now}_db_backup.sql.gz
find ${homePath}/dbBackups/ -type f -mtime +30 -delete
rsync -e ssh backup_user@backup.server.com:/home/backup_user/backup.server.com/dbBackups/ ${homePath}/dbBackups/

足够简单。 这听起来对你好吗?

由于版本1不起作用,经过极小的摆弄后,这是工作脚本:

homePath="/home/myuser"
now=$(date +'%m-%d-%y')

mysqldump -h mysql.server.com my_database | gzip -9 > ${homePath}/dbBackups/db_backup.sql.gz
mv ${homePath}/dbBackups/db_backup.sql.gz ${homePath}/dbBackups/${now}_db_backup.sql.gz
find ${homePath}/dbBackups/ -type f -mtime +30 -delete
rsync -a --log-file=${homePath}/rsync.log  ${homePath}/dbBackups/ backup_user@backup.server.com:/home/backup_user/backup.server.com/dbBackups/