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



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

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

以下是我得到的(用户名和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/

有人知道如何实现这个功能吗?

打印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天的文件。

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

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

你会想确保没有办法搞砸你的道路。事实上,${home}非常接近env-var$home,所以你可以考虑更改它。你也可以每天运行这样一个简单的脚本,从你扫描文件的地方删除文件。

你们都已经给予了额外的帮助。非常感谢。

因此,我将尝试的版本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/

相关内容

  • 没有找到相关文章

最新更新