2013-07-09 3 views
0

디렉토리에있는 더 낮은 버전의 jar 파일을 제거하는 스크립트가 있습니다.디렉토리의 중복 된 jar를 제거하십시오.

#!/bin/bash 
#Script to remove lower version jar files. 

for PREFIX in `ls *.jar|sed 's/-[0-9\.\0-9\.a-zA-Z]*\.jar//g'|uniq -d`; do 
    for FILE in `ls -r ${PREFIX}*|sed '1d'`; do 
    echo " $FILE" 
    rm $FILE 
    done 
done 

버그가 있습니다.

다음은 디렉토리에 중복 jar 파일 목록이 있습니다.

XYZ-1.1.jar XYZ-1.1.1.jar ABC-1.6.jar ABC-1.3.jar ABC-XYZ-PQR-1.9 ABC-XYZ-PQR-1.9.6.jar. 2.jar XYZ-tom.jar XYZ-톰 20120423.jar XYZ-톰 20120410.jar ABC-툴킷 1.6 런타임 5.2.0.jar ABC-툴킷 1.6 런타임 5.0. 0.jar

버그는 xyz 패턴 jar 파일에서 발생합니다. BUG : 1) 스크립트가 xyz-1.1.jar 대신 xyz-1.1.1.jar 파일을 제거합니다. 2) 스크립트가 xyz-tom-20120423.jar 및 xyz-tom-20120410.jar 파일을 제거합니다.

+0

이 쉘 스크립트에서 수행하기 어려운 작업의 종류이다. 더 풍부한 기능의 언어로 다시 작성하면 어떻게 잘못되었는지 쉽게 알 수 있습니까? 사실 Java 프로젝트에서 작업하는 것처럼 보이며 Java로 작업하지 않는 이유는 없습니다. – Jules

답변

1
#!/bin/bash 
if [ $# == 0 ]; then 
     dir='.' 
elif [ $# == 1 ]; then 
     dir=$1 
else 
     echo "Usage: $0 [dir]"; 
     exit 1; 
fi 

for lib in `find $dir -name '*.jar'`; do 
    for class in `unzip -l $lib | egrep -o '[^ ]*.class$'`; do 
    class=`echo $class | sed s/\\\\.class// | sed s/[-.\\/$]/_/g` 
    existing=$(eval "echo \$CLS_${class}") 
    if [ -n "$existing" ]; then echo "$lib $existing"; fi 
    eval CLS_${class}="\"${lib} ${existing}\"" 
    done 
done | sort | uniq -c | sort -nr 

I find this code here

관련 문제