如何修改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
相关产品推荐
相关产品推荐

