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

标签 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

最佳答案

午夜后,运行以下命令:

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

关于mysql - 使用 bash 脚本删除具有文件名模式的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20811872/

相关文章:

php - 借助 PHP、MySQL 和 HTML 表创建分类账户

mysql - 如果行不存在则插入的过程或函数

linux - 如何使用 sed 在 FIRST 和 LAST 匹配模式之前插入一行

Linux 键盘延迟

python - Apache Airflow UI 显示 DAG 导入错误(IndexError : list index out of range) But DAG works fine

bash - 在 cron 作业中使用 $(date "+%Y-%m-%d_%H:%M:%S") 有什么问题?

mysql - 使用 bash 脚本显示来自 MySql 的数据时出错

mysql - MariaDB 从现有列插入新列数据

python - 执行 SQL 查询的更有效方法?

python - 为 input() 函数输入数据时箭头键不起作用