【问题标题】:Remove duplicate jars in a directory删除目录中的重复 jar
【发布时间】:2013-07-07 12:20:41
【问题描述】:

我有一个脚本可以删除目录中的低版本 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 文件。

【问题讨论】:

  • 这是在 shell 脚本中执行的一项艰巨任务。我可以建议用功能更丰富的语言重写可能更容易看出它是如何出错的吗?事实上,我认为没有任何理由,因为您似乎正在开发一个 Java 项目,而不是使用 Java。

标签: jar duplicates


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2010-12-06
    • 1970-01-01
    • 2021-05-02
    • 2011-11-09
    • 1970-01-01
    相关资源
    最近更新 更多