BladeX/script/service/rename.sh

97 lines
3.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Copyright (c) 2018-2028, Chill Zhuang 庄骞 (bladejava@qq.com).
# <p>
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# <p>
# http://www.apache.org/licenses/LICENSE-2.0
# <p>
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################
# BladeX 一键修改包名与引用路径(注意需要同时将blade-tool修改并安装依赖) #
################################################################
# original_project_path: 填写你需要修改的项目全路径 #
# new_project_suffix: 源工程文件拷贝至新目录的后缀名 #
# old_package: 需要替换的原包名 #
# new_package: 需要设置的新包名 #
################################################################
# 原始工程目录路径
original_project_path="/your/project/path/here"
# 新工程目录名后缀
new_project_suffix="-new"
# 设置原始包名
old_package="org.springblade"
# 设置新包名
new_package="com.example"
echo "copying project..."
# 新工程目录路径
new_project_path="${original_project_path}${new_project_suffix}"
# 拷贝工程目录
cp -r "$original_project_path" "$new_project_path"
# 将包名转换为路径
old_package_path=$(echo "$old_package" | sed 's/\./\//g')
new_package_path=$(echo "$new_package" | sed 's/\./\//g')
# 检查操作系统
os_name=$(uname)
sed_i_option="-i"
if [ "$os_name" = "Darwin" ]; then
# MacOS 需要一个空的扩展名来避免创建备份文件
sed_i_option="-i ''"
else
# 对于非MacOS系统使用-i选项不提供扩展名避免创建备份文件
sed_i_option="-i"
fi
echo "replacing package names and moving files..."
# 查找并替换Java、XML、Properties和YAML文件中的包名
# 同时移动文件到新的目录结构
find "$new_project_path" \( -iname "*.java" -o -iname "*.xml" -o -iname "*.properties" -o -iname "*.yml" -o -iname "*.yaml" \) -print0 | while IFS= read -r -d $'\0' file; do
# 替换文件中的包名
if [ "$os_name" = "Darwin" ]; then
sed -i '' "s|$old_package|$new_package|g" "$file"
else
sed -i "s|$old_package|$new_package|g" "$file"
fi
echo "modified: $file"
# 如果文件路径包含旧包名路径,则移动文件
if echo "$file" | grep -q "$old_package_path"; then
new_file=$(echo "$file" | sed "s|$old_package_path|$new_package_path|g")
new_dir=$(dirname "$new_file")
mkdir -p "$new_dir"
mv "$file" "$new_file"
echo "moved to: $new_file"
fi
done
# 删除空目录的逻辑,确保包括顶层目录在内的所有空目录都被删除
echo "removing empty directories..."
find "$new_project_path" -type d -empty -delete 2>/dev/null
# 从新工程目录的根部开始,递归删除所有空的目录
# 这个过程需要重复,直到没有更多的空目录为止
while IFS= read -r -d '' dir; do
find "$dir" -type d -empty -delete 2>/dev/null
done < <(find "$new_project_path" -type d -print0 | sort -rz)
# 检查并删除原始包名的顶级目录
top_level_old_package_dir="$new_project_path/$(echo "$old_package" | cut -d '.' -f 1)"
if [ -d "$top_level_old_package_dir" ] && [ ! "$(ls -A "$top_level_old_package_dir")" ]; then
rm -r "$top_level_old_package_dir"
fi
echo "package name and paths have been updated in the new project directory."