如何删除旧版本的Eclipse插件?

更新后,旧的Eclipse插件仍保留在“插件”文件夹中(“features”文件夹中还有剩菜)。

有没有办法自动删除这些?


为了摆脱旧的插件,你必须清除安装历史记录。 转到帮助| 关于Eclipse | 安装细节| 安装历史记录并选择所有旧的东西。 然后点击删除并重新启动。 瞧。 这适用于Eclipse Helios(3.6)


我也想删除旧的插件,但今天仍然没有答案,所以我写了一个快速而脏的脚本guess-old-eclipse-plugins.sh来处理旧的插件。

该脚本将扫描Eclipse目录下的插件目录。 并会生成一个remove-old-eclipse-plugins.txt文件,可用于删除旧插件。

该脚本在Windows XP上的Cygwin 1.7.15下进行了测试。

guess-old-eclipse-plugins.sh

PluginsDir=plugins
FeaturesDir=features
PluginIDSeparator=_
RemovingScriptFileName=remove-old-eclipse-plugins.txt
rm -rf $RemovingScriptFileName

#for dir in $PluginsDir $FeaturesDir
for dir in $PluginsDir  # $FeaturesDir: most file names in features dir contains more than 1 _ character
do
    echo "Processing [$dir] directory..."
    # split PluginID from filename
    # (not reliable, but general working. (ex: will get one junit PluginID because there're move than 1 _ characters in file name))
    file_list=$(ls $dir);
    echo "$file_list" | cut -f1 -d $PluginIDSeparator         > $dir-all.txt
    echo "$file_list" | cut -f1 -d $PluginIDSeparator  | uniq > $dir-uniq.txt

    # get the PluginList which VERY POSSIBLY has old versions
    diff_result=$(diff -U 0 $dir-uniq.txt $dir-all.txt)
    plugins_which_has_old_versions=$(echo "$diff_result" | grep -e "^+[^+]" | cut -f 2 -d +)

    #
    for p in $(echo "$plugins_which_has_old_versions")
    do
        echo "$p"
        i=0
        for f in $(ls -d -t $dir/$p$PluginIDSeparator*) # use 'ls' command, can sort result by file time, but can not handle file name contains special characters (white space) when using wildcard
        #for f in $(find $dir -name "$p$PluginIDSeparator*")    # use 'find' command
        do
            if [ -d $f ]
            then
                # should use rm -rf
                echo -n "[D]"
            else
                echo -n "   "
            fi
            echo -n "$f"

            ((i++))
            if [ $i -eq 1 ]
            then
                echo ""
                continue    # first file, the newest version
            fi
            echo "    [old]"
            echo "rm -rf $f" >> $RemovingScriptFileName
        done

        echo
    done
done

重要的提醒

在使用生成的remove-old-eclipse-plugins.txt文件移除插件之前,请确保其中列出的所有插件都是真正的旧插件。 因为,这个脚本不能处理文件名包含超过1个_字符。 例如:JUnit v3和v4插件是2种不同的插件,但脚本会将它视为相同的插件,因为这两个文件名称使用相同的org.junit_前缀。

org.junit
[D]plugins/org.junit_3.8.2.v3_8_2_v20100427-1100
[D]plugins/org.junit_4.8.2.v4_8_2_v20110321-1705    [old]  <-- wrong

因此, 请仔细使用它,在使用之前删除错误的部分,否则您的Eclipse IDE可能无法正常工作。

示例输出

$ ./guess-old-eclipse-plugins.sh
Processing [plugins] directory...
org.eclipse.gef
   plugins/org.eclipse.gef_3.7.2.v20111106-2020.jar
   plugins/org.eclipse.gef_3.6.2.v20110110-2020.jar    [old]

org.eclipse.help.base
   plugins/org.eclipse.help.base_3.6.2.v201202080800.jar
   plugins/org.eclipse.help.base_3.5.3.v201102101200.jar    [old]

org.eclipse.help.ui
   plugins/org.eclipse.help.ui_3.5.101.r37_20110819.jar
   plugins/org.eclipse.help.ui_3.5.3.r36_20101116.jar    [old]
...

示例生成的脚本

rm -rf plugins/org.eclipse.gef_3.6.2.v20110110-2020.jar
rm -rf plugins/org.eclipse.help.base_3.5.3.v201102101200.jar
rm -rf plugins/org.eclipse.help.ui_3.5.3.r36_20101116.jar
rm -rf plugins/org.eclipse.help.webapp_3.5.3.r36_20101130.jar
rm -rf plugins/org.eclipse.jdt.apt.core_3.3.402.R36_v20110120-1000.jar
rm -rf plugins/org.eclipse.jdt.debug.ui_3.5.2.v20100928a_r362.jar

我修改了脚本以允许使用所有下拉列表,功能和插件。 首先它依靠反向排序来猜测最新的规范插件版本。

接下来,它将合格的插件版本名称减少为规范插件sed表达式。 如果插件是该表达式的第一个匹配项,它将存储它的模式并保留它,否则它是一个陈旧的旧版本,并将其标记为删除。



# scan_old_plugins.sh

# script to scan for duplicate old eclipse features, plugins and dropins
# generates a "clean-old-plugins.sh" script to clean old versions.
# warning: DANGEROUS! review clean-old-plugins script before running it.

DropinsDir=dropins
FeaturesDir=features
PluginsDir=plugins

CanonicalPluginsFile=sed_canonical_plugins.sh
CleanPluginScriptFile=clean_old_plugins.sh

echo "" > $CanonicalPluginsFile
echo "" > $CleanPluginScriptFile

#for dir in $PluginsDir
for dir in $FeaturesDir $PluginsDir $DropinsDir
do
    echo "Processing [$dir] directory..."
    # 
    file_list=$(ls -1 $dir | sort -r);
    echo "$file_list" > $dir-all.txt

    #
    for p in $(echo "$file_list")
    do
        v=$(echo $p | sed -e 's/_[0-9._-]*/_.*/g' | sed -e 's/[0-9][0-9]*/.*/g')
        g=$(grep -l "$v" $CanonicalPluginsFile | head -1 | awk '{print $1}')
        if [ "$g" = "" ]; then
            echo "$p=keep";
            echo "$v=$p" >>  $CanonicalPluginsFile
        else
            echo "$p=stale";
            echo "rm -rf $p" >> $CleanPluginScriptFile
        fi

    done
done

链接地址: http://www.djcxy.com/p/90593.html

上一篇: How to remove old versions of Eclipse plugins?

下一篇: Find out what JVM Eclipse is running on