2

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

#!/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.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 文件有关。漏洞:

  • 脚本正在删除 xyz-1.1.1.jar 文件而不是 xyz-1.1.jar
  • 脚本正在删除 xyz-tom-20120423.jar 和 xyz-tom-20120410.jar 文件。
4

1 回答 1

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

我在这里找到这段代码

于 2013-12-16T12:52:51.383 回答