#!/usr/bin/env bash # sync_interactive.sh —— 交互式同步脚本 (v3) # 脚本会自动以其自身所在的位置为根目录,并提供不同的同步备份模式。 set -euo pipefail # --- 根目录设置 --- # 获取脚本文件所在的绝对路径,并将其作为所有操作的根目录 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) # --- 配置区域 --- # 算法源目录 (路径基于脚本位置) SRC_DIRS=( "$SCRIPT_DIR/Seg_All_In_One_YoloModel" "$SCRIPT_DIR/Seg_All_In_One_SegModel" "$SCRIPT_DIR/Seg_All_In_One_MMSeg" "$SCRIPT_DIR/Seg_All_In_One_Analysis" ) # 本地镜像/中转目录 (路径基于脚本位置) LOCAL_DST_ROOT="$SCRIPT_DIR/Hardisk" # NAS备份目标目录 (路径基于脚本位置) NAS_DST_ROOT="$SCRIPT_DIR/Nas_BackUp_Seg" # --- 用户选择操作 --- echo "--- 请选择要执行的同步操作 ---" echo " 1. [更新并备份算法文件] 从源头更新算法文件到Hardisk,并立即备份到NAS" echo " 2. [备份Hardisk] 将整个Hardisk目录的当前内容,完全拷贝到NAS【--delete】" echo " 3. [退出] 不执行任何操作" echo "------------------------------------------------" read -p "请输入选项 [1, 2, 或 3]: " choice case $choice in 1) echo "--- 您选择了 [1]: 更新并备份算法文件 (源->Hardisk->NAS) ---" # --- 第 1 步: 从源目录更新文件到 Hardisk --- echo "" echo "--> (1/2) 正在从源目录更新文件到 $LOCAL_DST_ROOT..." for src_path in "${SRC_DIRS[@]}"; do if [ ! -d "$src_path" ]; then echo " 警告: 源目录 '$src_path' 不存在,已跳过。" continue fi dst_dir_name=$(basename "$src_path") dst_path=$(mkdir -p "$LOCAL_DST_ROOT/$dst_dir_name" && realpath "$LOCAL_DST_ROOT/$dst_dir_name") echo " >>> 正在同步 $src_path -> $dst_path" rsync -avh --delete "$src_path/" "$dst_path/" done echo "--> (1/2) 本地 Hardisk 更新完成。" # --- 第 2 步: 从 Hardisk 备份到 NAS --- echo "" echo "--> (2/2) 正在将更新后的算法文件从 Hardisk 备份到 $NAS_DST_ROOT..." for dir_full_path in "${SRC_DIRS[@]}"; do dir_name=$(basename "$dir_full_path") src_from_hardisk="$LOCAL_DST_ROOT/$dir_name" dst_to_nas="$NAS_DST_ROOT/$dir_name" if [ ! -d "$src_from_hardisk" ]; then echo " 警告: 源目录 '$src_from_hardisk' 在 Hardisk 中不存在,已跳过备份。" continue fi mkdir -p "$dst_to_nas" dst_path_final=$(realpath "$dst_to_nas") echo " >>> 正在备份 $src_from_hardisk -> $dst_path_final" rsync -avh --delete "$src_from_hardisk/" "$dst_path_final/" done echo "--> (2/2) 指定的算法文件已成功备份到 NAS!" ;; 2) echo "--- 您选择了 [2]: 仅备份Hardisk (Hardisk->NAS) ---" src="$LOCAL_DST_ROOT/" dst="$NAS_DST_ROOT/" if [ ! -d "$src" ]; then echo "错误: 源目录 '$src' 不存在,无法继续。" exit 1 fi mkdir -p "$dst" echo ">>> 正在将 $src 的全部内容备份到 $dst" rsync -avh --delete "$src" "$dst" # 使用增量复制 echo ">>> Hardisk 目录已完全备份到 NAS!" ;; 3) echo "--- 您选择了 [3]: 退出 ---" echo "操作已取消。" ;; *) echo "无效选项 '$choice'。请输入 1, 2, 或 3。" exit 1 ;; esac echo "" echo ">>> 全部任务完成!"