#!/bin/bash
#=====================================================
# 批量重命名脚本 - 支持正则替换
# 来源: 整合自社区最佳实践
# 用法: ./batch-rename.sh <目录> <查找模式> <替换为>
# 示例: ./batch-rename.sh ./photos ".jpg" ".jpeg"
#=====================================================

DIR=${1:-.}
PATTERN=${2:-}
REPLACE=${3:-}

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

if [ -z "$PATTERN" ] || [ -z "$REPLACE" ]; then
    echo "用法: $0 <目录> <查找模式> <替换为>"
    echo ""
    echo "示例:"
    echo "  $0 ./photos '.jpg' '.jpeg'        # 改扩展名"
    echo "  $0 ./logs   'app-'  'server-'     # 改前缀"
    echo "  $0 ./data   '_old'  ''            # 删除后缀"
    exit 1
fi

if [ ! -d "$DIR" ]; then
    echo -e "${RED}目录不存在: $DIR${NC}"
    exit 1
fi

echo -e "${GREEN}批量重命名${NC}"
echo "  目录: $DIR"
echo "  查找: '$PATTERN' -> '$REPLACE'"
echo ""

# 列出将要重命名的文件
echo -e "${YELLOW}将要重命名的文件:${NC}"
COUNT=0
for file in "$DIR"/*"$PATTERN"*; do
    [ -e "$file" ] || continue
    BASENAME=$(basename "$file")
    NEWNAME="${BASENAME//$PATTERN/$REPLACE}"
    if [ "$BASENAME" != "$NEWNAME" ]; then
        echo "  $BASENAME -> $NEWNAME"
        COUNT=$((COUNT + 1))
    fi
done

if [ $COUNT -eq 0 ]; then
    echo -e "${YELLOW}  没有匹配的文件${NC}"
    exit 0
fi

echo ""
read -p "确认重命名以上 $COUNT 个文件? (yes/no): " CONFIRM

if [ "$CONFIRM" != "yes" ]; then
    echo "已取消"
    exit 0
fi

# 执行重命名
RENAMED=0
for file in "$DIR"/*"$PATTERN"*; do
    [ -e "$file" ] || continue
    BASENAME=$(basename "$file")
    NEWNAME="${BASENAME//$PATTERN/$REPLACE}"
    if [ "$BASENAME" != "$NEWNAME" ]; then
        mv "$file" "$DIR/$NEWNAME"
        echo -e "  ${GREEN}[✓]${NC} $BASENAME -> $NEWNAME"
        RENAMED=$((RENAMED + 1))
    fi
done

echo ""
echo -e "${GREEN}完成！重命名了 $RENAMED 个文件${NC}"