删除目录中的重复jar

删除目录中的重复jar

本文介绍了删除目录中的重复jar的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个脚本来删除目录中的较低版本的jars文件。

I have a script to remove lower version jars files in a directory.

#!/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

它有一个错误。

我有一个目录中的Duplicate jar文件列表。

I have below list of Duplicate jar files in a directory.

xyz-1.1.jar
xyz-1.1.1.jar
abc-1.6.jar
abc-1.3.jar
abc-xyz-pqr-1.9.6.jar
abc-xyz-pqr-1.9.2.jar
xyz-tom.jar
xyz-tom-20120423.jar
xyz-tom-20120410.jar
abc-toolkit-1.6-runtime-5.2.0.jar
abc-toolkit-1.6-runtime-5.0.0.jar

该错误与xyz模式jar文件有关。
BUG:

The bug is with xyz pattern jar files.BUG:


  • 脚本正在删除xyz-1.1.1.jar文件而不是xyz-1.1.jar

  • 脚本正在删除xyz-tom-20120423.jar和xyz-tom-20120410.jar文件。

推荐答案

#!/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

这篇关于删除目录中的重复jar的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-28 08:35