使用bash脚本删除具有文件名模式的文件

时间:2013-12-28 06:46:05

标签: mysql linux bash backup

我有这个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

1 个答案:

答案 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