#!/usr/bin/env bash # ============================================================================== # DEPLOYMENT SCRIPT: apply_compressed_audio.sh (v4.1 - fix unbound variable) # ============================================================================== set -Eeuo pipefail trap 'echo "❌ 出错 (line $LINENO)" >&2' ERR # ---------- 配置 ---------- COMPRESSED_DIR="./compressed_audio" DESTINATION_DIR="./asset/audio" COMPRESSED_EXT="ogg" SOURCE_EXTS=(wav mp3) DRY_RUN="${DRY_RUN:-0}" # 先生成备份目录名称,再引用 backup_dir="backup_$(date +%F_%H%M)" mkdir -p "$backup_dir" echo "**************************************************" printf "将用 '%s' 中的 *.%s 文件覆盖 '%s' 内同名原文件。\n" \ "$COMPRESSED_DIR" "$COMPRESSED_EXT" "$DESTINATION_DIR" echo "原文件将被移动至 ${backup_dir}。Dry-Run=$DRY_RUN" echo "**************************************************" read -rp "继续请键入 'yes': " confirmation [[ $confirmation != "yes" ]] && { echo "已取消"; exit 0; } # ---------- 主循环 ---------- count=0 find "$COMPRESSED_DIR" -type f -name "*.$COMPRESSED_EXT" -print0 | while IFS= read -r -d '' cfile; do rel="${cfile#$COMPRESSED_DIR/}" base="${rel%.$COMPRESSED_EXT}" dst="$DESTINATION_DIR/$base.$COMPRESSED_EXT" mkdir -p "$(dirname "$dst")" # 备份并删除所有原始文件 for ext in "${SOURCE_EXTS[@]}"; do orig="$DESTINATION_DIR/$base.$ext" [[ -f $orig ]] || continue if [[ $DRY_RUN -eq 0 ]]; then mv "$orig" "$backup_dir/"; fi printf "备份原文件 → %s\n" "$orig" done # 部署压缩文件 if [[ $DRY_RUN -eq 0 ]]; then mv "$cfile" "$dst"; fi printf "部署压缩文件 → %s\n" "$dst" ((count++)) done echo "----------------------------------------" echo "共处理 $count 个文件。备份目录: ${backup_dir}" [[ $DRY_RUN -eq 0 ]] && rm -rf "$COMPRESSED_DIR" echo "✅ 部署完成"