xiandie/apply_compressed_audio.sh

55 lines
1.9 KiB
Bash
Raw Normal View History

#!/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 "✅ 部署完成"