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