55 lines
1.9 KiB
Bash
Executable File
55 lines
1.9 KiB
Bash
Executable File
#!/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 "✅ 部署完成" |