shell腳本工具,用於將 普通java工程的 java文件 改成 按maven的結構存放

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章