当前位置: 首页 > news >正文

【VSCode】一键清理旧版本插件脚本(Mac或者Windows都可)

文章目录

  • 清理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/(-[0-9]+\.[0-9]+(\.[0-9]+)?(-.*)?)$//')
        # echo "### check plugin ### $plugin"
        if [ "$plugin" = "." ]; then
            continue
        fi
        # 查找该插件的所有版本,并按版本号排序
        versions=$(find . -maxdepth 1 -type d | grep -E "$plugin-[0-9]+\.[0-9]+\.[0-9]+" | 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

原理解释

  1. 首先 find 所有文件夹: find . -maxdepth 1 -type d -name "*.*" | sed 's/\.\///' | while read -r dir;
  2. 其次提取 [发布者].[插件名].[版本] 中的 [发布者].[插件名]plugin=$(echo "$dir" | sed -E 's/(-[0-9]+\.[0-9]+(\.[0-9]+)?(-.*)?)$//')
  3. 再次查找该插件的所有版本并逆序排一下:versions=$(find . -maxdepth 1 -type d | grep -E "$plugin-[0-9]+\.[0-9]+\.[0-9]+" | sed 's/\.\///' | sort -Vr)
  4. 删除旧版本插件文件夹: 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!-[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') 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

相关文章:

  • 算法19(力扣244)反转字符串
  • opencascade 获取edge起始点 会出现终点与实际不同的情况
  • Java 大视界 -- 绿色大数据:Java 技术在节能减排中的应用与实践(90)
  • @[TOC](优先级队列(堆)) 【本节目标】 1. 掌握堆的概念及实现 2. 掌握 PriorityQueue 的使用 # 1. 优先级队列
  • 蓝桥杯试题:计数问题
  • word文档提取信息
  • Spring MVC Streaming and SSE Request Processing SSE可以实现chatgpt一次请求分批次响应的效果
  • 数字化转型导师坚鹏:AI大模型DEEPSEEK使用方法及案例
  • 前端知识速记--css篇:CSS3中的常见动画及实现方式
  • 二分搜索算法核心-----labuladong笔记
  • LibreOffice转换word文档
  • GC 基础入门
  • 简述 tsconfig.json 中 rootDir 和 include 之间的关系
  • 沃德校园助手系统php+uniapp
  • Windows逆向工程入门之汇编位运算
  • DeepSeek R1本地化部署:从零搭建智能对话系统
  • Vue的简单入门 一
  • MySQL数据库(八)☞ 我是不是锁神
  • 草图绘制技巧
  • 学习web数据埋点
  • 商务部:中方敦促美方尽快停止232关税措施
  • 陕西榆林:全力推进榆林学院升格榆林大学
  • 第1现场 | 美国称将取消制裁,对叙利亚意味着什么
  • 马上评|让查重回归促进学术规范的本意
  • 中美是否计划讨论美方以芬太尼为由对华征收的特别关税?外交部回应
  • 全国汽车以旧换新补贴申请量突破1000万份