使用脚本执行备份网站,排除特定多个目录-网站建设服务中心-电脑网络-本牛千智丨专注WorkFine开发

使用脚本执行备份网站,排除特定多个目录

加上自定义文件名后缀的变量,可以让备份文件更清晰、更有意义,比如:

  • website_video_excluded_20250909.tar.gz
  • bn1000_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 吗?可以实现全自动“备份 + 通知 + 异地存储”流程。

请登录后发表评论

    请登录后查看回复内容