You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Unraid下Bash备份脚本实现数组三元素分组遍历

Unraid rsync备份脚本多参数遍历修改方案

原有脚本的数组遍历逻辑是按每2个元素为一组做取模判断,现在每组新增到3个参数(源路径、目标路径、任务名),直接把遍历逻辑改成步长3的顺序读取即可,同时补全日志子目录自动创建的逻辑,避免运行报错。

修改后完整可用脚本

#!/bin/bash

# 备份任务配置:每行对应1个任务,参数顺序固定为:源路径 目标路径 任务名
backup_jobs=(
    # source                    # destination         # jobname
    "/mnt/user/isos"            "/mnt/disks/Backup"   "isos"
    "/mnt/user/data"            "/mnt/disks/Backup"   "backup"
)

# 统一配置日志根目录,后续调整路径仅需修改此处
LOG_BASE_PATH="/mnt/disks/Backup/rsync-logs"

# 按步长3遍历数组,每次读取1组完整任务参数
for ((i=0; i<${#backup_jobs[@]}; i+=3)); do
    src_path="${backup_jobs[i]}"
    dst_path="${backup_jobs[i+1]}"
    job_name="${backup_jobs[i+2]}"

    # 自动创建当前任务专属的日志子目录,避免路径不存在导致rsync报错
    job_log_dir="${LOG_BASE_PATH}/${job_name}"
    mkdir -p "$job_log_dir"

    # 执行备份,日志写入对应任务的子文件夹
    rsync -av --delete \
      --log-file="${job_log_dir}/log.$(date '+%Y_%m_%d__%H_%M_%S').log" \
      --progress \
      --exclude '.Recycle.Bin' \
      "$src_path" "$dst_path"
done

关键修改说明

  • 替换了原有的取模跳转遍历逻辑,采用固定步长3的C风格for循环,每次循环直接读取连续3个数组元素对应一组任务的三个参数,逻辑清晰不会出现索引错位问题
  • 新增任务日志子目录自动创建逻辑,不需要手动提前建好各任务的日志文件夹
  • 所有路径变量统一用双引号包裹,兼容带空格/特殊字符的路径场景
  • 把日志根目录抽成全局变量,后续调整日志存储位置不需要修改rsync执行命令

内容的提问来源于stack exchange,提问作者cHolzer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:09:19