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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值