## 函数用于同步目录并计算传输完成度 sync_and_check() { local source_dir=$1 local target_dir=$2 local dir_name=$3
## 检查目标目录是否存在,若不存在则创建 if [ ! -d "$target_dir" ]; then echo"目标目录 $target_dir 不存在,正在创建..." mkdir -p "$target_dir" if [ $? -ne 0 ]; then echo"创建目标目录失败,请检查权限。" >&2 return 1 fi fi
## 执行同步操作 rsync -avhzp --progress --delete "$source_dir""$target_dir" 2>&1 local rsync_status=$?
## 计算源目录和目标目录的文件大小 local source_size=$(du -sb "$source_dir" | cut -f1) local target_size=$(du -sb "$target_dir" | cut -f1)
## 计算传输完成度 local completion if [ "$target_size" -gt 0 ] && [ "$source_size" -gt 0 ]; then completion=$(awk "BEGIN {printf \"%.2f\", ($target_size / $source_size) * 100}") else completion="0.00" fi
## 输出结果 if [ $rsync_status -eq 0 ]; then echo"同步操作成功完成($dir_name):" echo"- 传输完成度: ${completion}%" else echo"同步失败($dir_name),请检查日志以获取更多信息。" fi }
## 循环遍历所有目标目录并同步 for index in"${!target_dirs[@]}"; do target_dir="${target_dirs[$index]}" dir_name="路径$((index + 1))" sync_and_check "$source_dir""$target_dir""$dir_name" done