我有这个bash脚本,每隔5分钟创建一次数据库备份,我用crontab运行。在一天结束时,我想删除创建的那些并留下当天创建的最后一个。
以下是脚本的内容:
#! /bin/bash
DATE=$(date +"%Y%m%d%H%M")
mysqldump -ubackup_user db_to_backup > ~/backup/db_$DATE.sql
tar -zcvf ~/backup/db_$DATE.tar.gz ~/backup/db_$DATE.sql
rm ~/backup/db_$DATE.sql
创建的示例文件:
db_201312272300.tar.gz
db_201312272305.tar.gz
db_201312272310.tar.gz
db_201312272315.tar.gz
db_201312272320.tar.gz
db_201312272325.tar.gz
db_201312272330.tar.gz
db_201312272335.tar.gz
db_201312272340.tar.gz
db_201312272345.tar.gz
db_201312272350.tar.gz
db_201312272355.tar.gz
db_201312280000.tar.gz
db_201312280005.tar.gz
db_201312280010.tar.gz
db_201312280015.tar.gz
它应该在当天结束时留下以下内容:
db_201312280000.tar.gz
db_201312280005.tar.gz
db_201312280010.tar.gz
db_201312280015.tar.gz
将以下文件复制/移动到其他目录:
db_201312272355.tar.gz
答案 0 :(得分:1)
午夜后,运行以下内容:
old=$(date +"%Y%m%d" -d yesterday)
mv "db_${old}2355.tar.gz" different/directory && rm "db_${old}*.tar.gz"
我将移动和删除命令与&&
连接起来作为安全预防措施。这样,只有当2355备份的移动成功时,才会删除昨天的备份。如果您的磁盘空间不足并且不太关心备份完整性,请将&&
替换为;
(或换行符)。
另外,如果根据问题中的脚本,只有一个文件进入tar文件,那么tar
是多余的。您可以用以下代码替换这两行:
mysqldump -ubackup_user db_to_backup | gzip >~/backup/db_$DATE.gz