温锦文欧普厨电及净水器总代理 发表于 2025-10-29 05:24:32

【VSCode】一键清算旧版本插件脚本(Mac大概Windows都可)

清算VSCode旧版本插件

为什么会有旧版本插件

vscode 插件经常须要更新的,偶尔间更新之后旧版本的插件还是会留存在插件文件夹中(更新插件之后vscode并不会删除旧版本插件),路径一样寻常是.vsode/extensions ,如果插件很多,也经常更新就会出现很多旧版本的插件不停留存在插件文件夹中,这有点占存储,着实说到底 vscode 在更新插件之后存在一点瑕疵——没有删除老版本插件
Mac 环境

脚本源码

#!/bin/bash
EXTENSIONS_DIR="$HOME/.vscode/extensions"
EXTENSIONS_DIR="$HOME/Desktop/DCTG/test"
if [ -d "$EXTENSIONS_DIR" ]; then
    cd "$EXTENSIONS_DIR" || exit
    # 查找所有插件,按发布者和插件名分组
    find . -maxdepth 1 -type d -name "*.*" | sed 's/\.\///' | while read -r dir; do
      # 提取插件名称部分(发布者.插件名)
      # echo "### check dir ### $dir"
      plugin=$(echo "$dir" | sed -E 's/(-+\.+(\.+)?(-.*)?)$//')
      # echo "### check plugin ### $plugin"
      if [ "$plugin" = "." ]; then
            continue
      fi
      # 查找该插件的所有版本,并按版本号排序
      versions=$(find . -maxdepth 1 -type d | grep -E "$plugin-+\.+\.+" | sed 's/\.\///' | sort -Vr)
      # 如果有多于一个版本,则删除旧版本
      if [ "$(echo "$versions" | wc -l)" -gt 1 ]; then
            echo "Cleaning up old versions of $plugin ..."
            echo "$versions" | tail -n +2 | xargs rm -rf
            echo "Done."
      fi
    done
else
    echo "VSCode extensions directory not found: $EXTENSIONS_DIR"
fi
原明确释


[*]起首 find 全部文件夹: find . -maxdepth 1 -type d -name "*.*" | sed 's/\.\///' | while read -r dir;
[*]其次提取 [发布者].[插件名].[版本] 中的 [发布者].[插件名]: plugin=$(echo "$dir" | sed -E 's/(-+\.+(\.+)?(-.*)?)$//')
[*]再次查找该插件的全部版本并逆序排一下:versions=$(find . -maxdepth 1 -type d | grep -E "$plugin-+\.+\.+" | sed 's/\.\///' | sort -Vr)
[*]删除旧版本插件文件夹: echo "$versions" | tail -n +2 | xargs rm -rf
实例表明

举个例子,假设插件文件夹下面有如下文件夹:
github.copilot-chat-0.24.0
github.copilot-chat-0.24.1
github.copilot-chat-0.24.2


[*]第一步和第二步处置惩罚之后得到 plugin = github.copilot-chat
[*]第三步处置惩罚之后得到逆序github.copilot-chat-0.24.2
github.copilot-chat-0.24.1
github.copilot-chat-0.24.0

[*]第四步处置惩罚:

[*]echo "$versions" | tail -n +2 github.copilot-chat-0.24.1
github.copilot-chat-0.24.0

[*]xargs rm -rf 直接删除 0.24.0 和 0.24.1

Windows 环境

   没测试过,通过 deepseek 转换 bash 脚本天生
@echo off
setlocal enabledelayedexpansion

:: 设置 VSCode 扩展目录
set "EXTENSIONS_DIR=%USERPROFILE%\.vscode\extensions"

:: 检查目录是否存在
if not exist "%EXTENSIONS_DIR%" (
    echo VSCode extensions directory not found: %EXTENSIONS_DIR%
    exit /b 1
)

:: 遍历所有插件目录
cd /d "%EXTENSIONS_DIR%"
for /d %%d in (*.*) do (
    set "dir=%%d"
    :: 提取插件名称(去掉版本号)
    for /f "tokens=1,2 delims=-" %%a in ("!dir!") do (
      set "plugin=%%a"
      set "version=%%b"
    )

    :: 跳过无效目录
    if "!plugin!"=="" (
      echo Skipping invalid directory: !dir!
      goto :next
    )

    :: 查找该插件的所有版本
    set "versions="
    for /f "delims=" %%v in ('dir /b /ad "!plugin!-*" ^| findstr /r /c:"^!plugin!-*\.*\.*"') do (
      set "versions=!versions!%%v"$REMOVE$
    )

    :: 按版本号排序(降序)
    set "sorted="
    for /f "tokens=1* delims=." %%a in ('(for %%v in (!versions!) do @echo %%v^) ^| sort /r') do (
      set "sorted=!sorted!%%a.%%b "
    )

    :: 删除旧版本
    set "count=0"
    for %%v in (!sorted!) do (
      set /a "count+=1"
      if !count! gtr 1 (
            echo Deleting old version: %%v
            rmdir /s /q "%%v"
      )
    )

    :next
)
echo Cleanup completed.
endlocal

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【VSCode】一键清算旧版本插件脚本(Mac大概Windows都可)