查找目录下包含某个类的jar文件

支持cygwin(两种路径格式都支持),支持相对路径

#!/bin/bash
#从目录中的jar文件中查找指定的类
path=$1
name=$2
if [ "" = "$path" ];then
	echo "path not specified"
	exit
fi
if [ "" = "$name" ];then
	echo "name not specified"
	exit 1
fi
#cygwin处理
if [ ${path:1:2} = ':' ];then
	drive=`echo ${path:0:1}|tr "[:upper:]" "[:lower:]"`
	path=${path:3}
	path='/cygdrive/'$drive'/'${path//\//}
elif [ ${path:0:1} != '/' ];then
	path=$(pwd)"/$path"
fi
list=(`find $path -name *.jar -type f`)
c=${#list[*]}
cLen=${#c}
for row in ${list[*]}
do
	c=`expr $c - 1`
	printf "%"-$cLen"sr" $c
	rowWin=${row//cygdrive/c/C:}
	num=`jar -tf $rowWin|grep $name|wc -l`
	if [ $num -gt 0 ];then
		echo -e "r"$row
	fi
done

例如:
./findJarClass.sh "C:Workjavaapache-flume-1.5.2-binlib" PollableSource

检测(检查)错误的jar包并删除

maven有时候下载包特别慢,Ctrl+C中断后可能会在本地仓库产生一个不完整的jar包,这肯定要出问题了,写了一个cygwin下删除有问题jar包的脚本,linux环境稍加修改即可。

#!/bin/bash
path='/cygdrive/c/Users/aresr_000/.m2/repository'
list=(`find $path -name *.jar -type f`)
c=${#list[*]}
for row in ${list[*]}
do
	c=`expr $c - 1`
	echo $c
	rowWin=${row//cygdrive/c/C:}
	jar -tf $rowWin > /dev/null 2>&1
	if [ $? -ne 0 ];then
		rm -f $row
		echo $row
	fi
done

因为jar命令是windows本地命令,所以要用windows格式的路径。