加上自定义文件名后缀的变量,可以让备份文件更清晰、更有意义,比如:
website_video_excluded_20250909.tar.gzbn1000_com_clean_backup_20250909.tar.gz
✅ 修改目标
在你当前脚本的基础上:
- 添加变量
BACKUP_SUFFIX自定义后缀 - 文件名格式:
website_{后缀}_YYYYMMDD_HHMM.tar.gz - 保持:多目录排除 + 仅保留最新一份
✅ 最终版脚本(支持自定义文件名后缀)
#!/bin/bash
# ================== 配置区域(请根据实际情况修改)==================
WEB_ROOT="/www/wwwroot/bn1000.com" # 网站根目录
BACKUP_DIR="/www/backup/site/bn1000.com" # 备份存储路径
DB_NAME="bn1000_com" # 数据库名
DB_USER="bn1000_com" # 数据库用户名
DB_PASS="ME9YT5fKmRABE3Q" # 数据库密码
# ✅ 自定义后缀(可包含字母、数字、下划线,不要用特殊字符)
BACKUP_SUFFIX="no_video_cache" # 例如:clean, no_media, optimized 等
DATE=$(date +"%Y%m%d_%H%M")
# 🔥 文件名使用后缀:website_{后缀}_时间.tar.gz
WEB_BACKUP_FILE="$BACKUP_DIR/website_${BACKUP_SUFFIX}_$DATE.tar.gz"
DB_BACKUP_FILE="$BACKUP_DIR/db_${BACKUP_SUFFIX}_$DATE.sql"
# 查找上一次的同类型备份(用于删除旧文件)
# 删除上一次包含相同后缀的备份文件
LAST_WEB_FILE=$(ls $BACKUP_DIR/website_${BACKUP_SUFFIX}_*.tar.gz 2>/dev/null | grep -v "$DATE" | head -n1)
LAST_DB_FILE=$(ls $BACKUP_DIR/db_${BACKUP_SUFFIX}_*.sql 2>/dev/null | grep -v "$DATE" | head -n1)
# 要排除的目录(可继续添加)
EXCLUDE_1="wp-content/uploads/WorkFineVideo"
EXCLUDE_2="wp-content/cache"
EXCLUDE_3="wp-content/logs"
EXCLUDE_4="debug.log"
EXCLUDE_5="temp"
# ================================================================
# 创建备份目录
mkdir -p $BACKUP_DIR
echo "开始备份网站文件(排除多个目录)..."
# 执行打包,排除指定目录
tar \
--exclude="$WEB_ROOT/$EXCLUDE_1" \
--exclude="$WEB_ROOT/$EXCLUDE_2" \
--exclude="$WEB_ROOT/$EXCLUDE_3" \
--exclude="$WEB_ROOT/$EXCLUDE_4" \
--exclude="$WEB_ROOT/$EXCLUDE_5" \
-czf "$WEB_BACKUP_FILE" \
-C "$(dirname $WEB_ROOT)" "$(basename $WEB_ROOT)" \
&& echo "网站文件备份完成:$WEB_BACKUP_FILE" \
|| { echo "网站文件备份失败!"; rm -f "$WEB_BACKUP_FILE"; exit 1; }
echo "开始备份数据库:$DB_NAME"
mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$DB_BACKUP_FILE"
if [ $? -eq 0 ]; then
echo "数据库备份完成:$DB_BACKUP_FILE"
else
echo "数据库备份失败,请检查用户名、密码或数据库名!"
rm -f "$DB_BACKUP_FILE" "$WEB_BACKUP_FILE"
exit 1
fi
# 清理上一次的同类型旧备份
echo "清理上一次的旧备份..."
[ -n "$LAST_WEB_FILE" ] && [ -f "$LAST_WEB_FILE" ] && rm -f "$LAST_WEB_FILE" && echo "已删除旧网站备份: $LAST_WEB_FILE"
[ -n "$LAST_DB_FILE" ] && [ -f "$LAST_DB_FILE" ] && rm -f "$LAST_DB_FILE" && echo "已删除旧数据库备份: $LAST_DB_FILE"
echo "✅ 备份完成!"
echo " 网站文件: $WEB_BACKUP_FILE"
echo " 数据库: $DB_BACKUP_FILE"
✅ 使用示例
1. 设置后缀为 no_video
BACKUP_SUFFIX="no_video"
生成文件:
website_no_video_20250909_1930.tar.gz
db_no_video_20250909_1930.sql
2. 设置后缀为 clean_backup
BACKUP_SUFFIX="clean_backup"
生成文件:
website_clean_backup_20250909_1930.tar.gz
db_clean_backup_20250909_1930.sql
3. 设置后缀为空(只用时间)
BACKUP_SUFFIX=""
生成文件:
website_20250909_1930.tar.gz
db_20250909_1930.sql
✅ 关键改进点
| 功能 | 实现方式 |
|---|---|
| 自定义后缀 | 新增 BACKUP_SUFFIX 变量 |
| 精准删除旧文件 | ls ..._suffix_*.tar.gz 只删同类备份 |
| 安全判断 | [ -n "$LAST_FILE" ] 防止空变量错误 |
| 易读清晰 | 文件名自带语义,一目了然 |
✅ 小贴士
- 后缀建议使用小写字母、数字、下划线,避免空格或
#、$、/等特殊字符 - 你可以为不同站点设置不同后缀,便于管理
- 如果你有多个计划任务备份不同策略,后缀能帮你区分开
需要我帮你把这个脚本升级为 支持发送企业微信/钉钉通知,或者 自动上传到腾讯云COS 吗?可以实现全自动“备份 + 通知 + 异地存储”流程。


请登录后查看回复内容