一个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 ""