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

How to limit a directory to keep a certain amount of files in it

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

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

这是我得到的(用户名和密码保存在 .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命令就是easiest/cleanest的解决方法。如果你愿意,你也可以做

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

你会想确保没有办法搞砸你的路径。事实上 ${home} 非常接近 env var $HOME 所以你可以考虑改变它。您还可以每天 cron 一个像这样的简单脚本到 运行 以从您对它们进行 scp 的任何地方删除文件。

你们都已经提供了额外的帮助。谢谢。

所以我要尝试的版本 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/