#!/bin/bash # ========================== # Debian → Windows SMB 自动同步增强版 V7 # 所有输出在当前终端显示,不清屏 # 支持权限修正、掉线重挂载、实时同步 # ========================== CONF_FILE="/var/www/.backup_sync.conf" LOG_FILE="/var/www/backup_sync.log" # 默认配置 WIN_IP="192.168.1.22" WIN_SHARE="backup" WIN_USER="administrator" WIN_PASS="administrator" SRC_DIR="/var/www/backup" MOUNT_DIR="/mnt/winbackup" USER_NAME=$(whoami) # 读取已有配置 [ -f "$CONF_FILE" ] && source "$CONF_FILE" # --------------------------- # 检查并安装依赖 + 修复权限 # --------------------------- install_dependencies_and_fix_permissions() { echo "🟢 检查并安装依赖..." DEPS=(cifs-utils inotify-tools rsync cron) for pkg in "${DEPS[@]}"; do if ! dpkg -l | grep -qw "$pkg"; then read -p "依赖 $pkg 未安装,是否安装? (y/n): " ans case "$ans" in y|Y) echo "安装 $pkg..." apt update && apt install -y "$pkg" ;; *) echo "⚠️ 跳过 $pkg";; esac else echo "✅ 已安装 $pkg" fi done systemctl enable cron systemctl start cron echo "🟢 依赖检查完成" # 修复备份目录权限 echo "🟢 正在修复备份目录权限..." sudo chown -R "$USER_NAME:$USER_NAME" "$SRC_DIR" echo "✅ 权限修复完成" read -p "按回车继续..." } # --------------------------- # 配置菜单:Debian 和 Windows 目录配置 # --------------------------- config_menu() { echo "==== Debian 和 Windows 目录配置 ====" echo "1. 设置 Windows 配置" echo "2. 设置 Debian 配置" echo "3. 保存并退出配置" read -p "请选择 [1-3]: " c case $c in 1) echo "==== Windows 配置 ====" read -p "输入 Windows IP (当前: $WIN_IP): " input; [ -n "$input" ] && WIN_IP="$input" read -p "输入共享名 (当前: $WIN_SHARE): " input; [ -n "$input" ] && WIN_SHARE="$input" read -p "输入用户名 (当前: $WIN_USER): " input; [ -n "$input" ] && WIN_USER="$input" read -s -p "输入密码 (当前: ********): " input; [ -n "$input" ] && WIN_PASS="$input"; echo ;; 2) echo "==== Debian 配置 ====" read -p "输入本地备份目录 (当前: $SRC_DIR): " input; [ -n "$input" ] && SRC_DIR="$input" read -p "输入挂载目录 (当前: $MOUNT_DIR): " input; [ -n "$input" ] && MOUNT_DIR="$input" ;; 3) # 保存配置并返回主菜单 save_config_menu echo "配置已保存" return ;; *) echo "无效选项";; esac config_menu } # --------------------------- # 保存配置 # --------------------------- save_config_menu() { mkdir -p /var/www cat > "$CONF_FILE" < "$CRED_FILE" <> /etc/fstab <> "$SYNC_LOG" echo "✅ 同步完成,等待10秒..." | tee -a "$LOG_FILE" sleep 10 done } # --------------------------- # 守护模式入口 # --------------------------- if [ "$1" == "--daemon" ]; then echo "🟢 backup_sync 自动守护已启动" >> "$LOG_FILE" mount_smb realtime_sync >> "$LOG_FILE" 2>&1 exit 0 fi # --------------------------- # 主菜单 # --------------------------- while true; do echo "===============================" echo " Windows SMB 自动同步 V7" echo "===============================" echo "1. 检查并安装依赖和修复权限" echo "2. Debian 和 Windows 目录配置" echo "3. 首次挂载并全量同步" echo "4. 实时同步(当前终端显示)" echo "5. 设置每日定时同步" echo "6. 每周删除已同步文件" echo "7. 退出" echo "===============================" read -p "请选择 [1-7]: " choice case $choice in 1) install_dependencies_and_fix_permissions ;; 2) config_menu ;; 3) install_dependencies_and_fix_permissions && mount_smb && full_sync ;; 4) realtime_sync ;; 5) setup_cron ;; 6) delete_old_files_weekly ;; 7) exit 0 ;; *) echo "无效选项";; esac done