2025-03-06 14:17:24 +08:00

63 lines
1.5 KiB
Bash

#!/bin/bash
# 读取配置文件并解析键值对
declare -A REPLACEMENTS
while IFS='=' read -r key value; do
[[ $key =~ ^@.*@$ ]] || continue # 仅处理形如 @VAR@ 的键
REPLACEMENTS["$key"]="$value"
done < ace-base.config
# 目标目录(默认当前目录)
if [[ -z "$1" ]];then
echo "Need appoint target dir."
exit
fi
TARGET_DIR="${1}"
# 替换文件内容
replace_in_files() {
local file="$1"
local temp_file="${file}.tmp"
# 遍历所有替换规则
cp "$file" "$temp_file"
for key in "${!REPLACEMENTS[@]}"; do
sed -i "s|$key|${REPLACEMENTS[$key]}|g" "$temp_file"
done
# 确保有更改后才覆盖原文件
if ! cmp -s "$file" "$temp_file"; then
mv "$temp_file" "$file"
echo "Updated content in: $file"
else
rm "$temp_file"
fi
}
# 递归扫描目录,处理文本文件的内容
find "$TARGET_DIR" -type f | while read -r file; do
if file --mime-type "$file" | grep -q 'text/'; then
replace_in_files "$file"
fi
done
# 处理文件名和目录名
find "$TARGET_DIR" -depth | while read -r old_name; do
new_name="$old_name"
# 替换文件名中的占位符
for key in "${!REPLACEMENTS[@]}"; do
new_name="${new_name//$key/${REPLACEMENTS[$key]}}"
done
# 如果名称有变化,则重命名
if [[ "$old_name" != "$new_name" ]]; then
mv "$old_name" "$new_name"
echo "Renamed: $old_name -> $new_name"
fi
done
echo "Processing completed."