一个shell脚本工具,用于将 普通java工程的 java文件 改成 按maven的结构存放,如,假设当前目录为/d/home/mnsv/kw/source/,下面有多个目录,有的是java工程目录(里面有src目录),有的不是,只处理java工程目录的java文件,如:
java file: /d/home/mnsv/kw/source/prg_ao/src/com/L2.java
src dir: /d/home/mnsv/kw/source/prg_ao/src
desc dir: /d/home/mnsv/kw/source/prg_ao/src/main/java
desc full path: /d/home/mnsv/kw/source/prg_ao/src/main/java/com/L2.java
#i/bin/sh
#方案2
#优先级从高到低依次为: ERROR 、 WARN 、 INFO 、 DEBUG
log_level="INFO"
showlog()
{
#第一个参数 $1 为优先级
level=$1
#第二个参数 $1 为打印的消息
logmsg=$2
if [ $log_level == "DEBUG" ]
then
#其中 -o 表示 或者,等效 java/c 的 ||
if test $level == "ERROR" -o $level == "WARN" -o $level == "INFO" -o $level == "DEBUG"
then
echo "${logmsg}"
fi
elif [ $log_level == "INFO" ]
then
if test $level == "ERROR" -o $level == "WARN" -o $level == "INFO"
then
echo "${logmsg}"
fi
elif [ $log_level == "WARN" ]
then
if test $level == "ERROR" -o $level == "WARN"
then
echo "${logmsg}"
fi
elif [ $log_level == "ERROR" ]
then
if test $level == "ERROR"
then
echo "${logmsg}"
fi
fi
}
#列出所有项目目录
dir_with_sub_dir_named_src_array=()
list_all_prj_dir()
{
#第一个参数 $1 为 目录
ONE_DIR1=$1
showlog "DEBUG" " "
showlog "DEBUG" "--call fun: list_all_prj_dir() , current dir: ${ONE_DIR1}--"
#迭代当前目录的下级目录
for a_dir_may_have_sub_dir_named_src in `ls ${ONE_DIR1} -d */`
do
#if 其下面存在src目录
if [ -d "${a_dir_may_have_sub_dir_named_src}src" ]; then
showlog "DEBUG" " found a dir has sub dir named 'src': ${a_dir_may_have_sub_dir_named_src}"
dir_with_sub_dir_named_src_array[${#dir_with_sub_dir_named_src_array[@]}]=${a_dir_may_have_sub_dir_named_src}
showlog "DEBUG" " after add this item, arr count: ${#dir_with_sub_dir_named_src_array[@]}"
fi
done
showlog "DEBUG" " "
}
#把一个文件复制到指定目录,自动创建目标目录
copy_java_file_form_src_2_src_main_java()
{
a_java_file=$1
src_full_path=$2
desc_full_path=$3
#echo " java file: ${a_java_file}"
#echo " src full path: ${src_full_path}"
#echo " desc full path: ${desc_full_path}"
# java file: /d/home/mnsv/kw/source/prg_ao/src/com/L2.java
# src full path: /d/home/mnsv/kw/source/prg_ao/src
# desc full path: /d/home/mnsv/kw/source/prg_ao/src/main/java
#从左向右截取第一个string后的字符串: 从一个完整的java文件路径 去掉 原始src目录路径 后,得到相对路径,如: /com/L2.java
#java_file_relative_path=${a_java_file#*$src_full_path}
#起始位置需要加1
#java_file_relative_path=`expr substr "$a_java_file" ${#src_full_path} ${#a_java_file}`
#获得相对路径的方法2
#src_full_path_len="${#src_full_path}";java_file_relative_path=${a_java_file:src_full_path_len}
# echo " java_file_relative_path: ${java_file_relative_path}"
# https://www.cnblogs.com/gaochsh/p/6901809.html linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )
#替换的方式获得新文件的路径
# 语法: ${string/#substring/replacement} 如果$string的前缀匹配$substring,
desc_java_full_path=${a_java_file/${src_full_path}/${desc_full_path}}
#获取最终所在目录
# 语法: ${string%substring} 从变量$string的结尾, 删除最短匹配$substring的子串
desc_java_dir=${desc_java_full_path%/*}
#确保目录存在
if test ! -d "${desc_java_dir}"; then
echo " mkdir: ${desc_java_dir}"
mkdir -p ${desc_java_dir}
fi
echo " desc_java_full_path: ${desc_java_full_path}"
cp ${a_java_file} ${desc_java_dir}
}
# 列出所有java文件,直接拷过去,需要的创建目录
all_dir_copy_java_form_src_2_src_main_java_way2()
{
#第一个参数 $1 为 目录
ONE_DIR_0A=$1
CURRENT_WORK_DIR=`pwd`
list_all_prj_dir ${ONE_DIR_0A}
for a_dir_have_sub_dir_named_src in "${dir_with_sub_dir_named_src_array[@]}"
do
# 待copy项目的src目录
src_full_path="${ONE_DIR_0A}/${a_dir_have_sub_dir_named_src}src"
showlog "INFO" "-----java src dir: ${src_full_path}----"
desc_full_path="${ONE_DIR_0A}/${a_dir_have_sub_dir_named_src}src/main/java"
showlog "INFO" "-----java desc dir: ${desc_full_path}----"
for a_java_file in `find ${src_full_path}/ -name '*.java'`
do
copy_java_file_form_src_2_src_main_java $a_java_file $src_full_path $desc_full_path
done
done
}
TEST_all_dir_copy_java_form_src_2_src_main_java_way2()
{
cd /d/home/mnsv/kw/source
echo "--pwd--"
pwd
echo -e "\r\n--ls -r files:--"
# -r 只列出当前目录的文件和目录
# -R 列出各级目录的文件和目录
ls -r .
echo -e "\r\n"
CURRENT_DIR=`pwd`
# 测试
all_dir_copy_java_form_src_2_src_main_java_way2 ${CURRENT_DIR}
}
#for test
TEST_all_dir_copy_java_form_src_2_src_main_java_way2
echo -e "\r\n----"
echo ""