我用 Homebrew Cask 中社区维护的规则写了一个软件残留文件清理插件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
jybox
V2EX    分享创造

我用 Homebrew Cask 中社区维护的规则写了一个软件残留文件清理插件

  •  7
     
  • &bsp; jybox
    jysperm 2023-02-21 07:22:26 +08:00 4850 次点击
    这是一个创建于 963 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前我就在 V2EX 就分享过用 brew uninstall --zap 来清理软件残留,有 39 个人给我点了感谢(地址)。

    我是觉得 Homebrew 里这个社区维护的软件残留列表(或者说清理规则)是非常有价值的,比如我们随便找一个软件,它的 cask 文件 是这样的:

    $ brew cat bitbar cask "bitbar" do version "1.10.1" sha256 "8a7013dca92715ba80cccef98b84dd1bc8d0b4c4b603f732e006eb204bab43fa" url "https://github.com/matryer/bitbar/releases/download/v#{version}/BitBar.app.zip" name "BitBar" desc "Utility to display the output from any script or program in the menu bar" homepage "https://github.com/matryer/bitbar/" app "BitBar.app" zap trash: [ "~/Library/BitBar Plugins", "~/Library/Caches/com.matryer.BitBar", "~/Library/Preferences/com.matryer.BitBar.plist", ] end 

    其中 zap 部分就是需要清理的遗留文件。

    于是我做了一个插件可以一键扫描 Homebrew Cask 中所有软件(目前支持其中约 3400 个)的 cask 文件中的路径,找出已卸载软件的遗留文件:

    项目的源代码在 https://github.com/jysperm/homebrew-leftover-scanner

    安装:

    brew tap jysperm/leftover-scanner 

    开始扫描:

    brew scan-leftovers 

    这个插件本身并不会删除任何文件,而是会打印出列表并引导你使用 brew uninstall 来删除,所以不必担心误删。

    26 条回复    2023-03-01 00:57:19 +08:00
    steveshi
        1
    steveshi  
       2023-02-21 08:08:23 +08:00
    666 这个确实很强,不过会莫名其妙扫出来我安装的 mpv 和 pycharm
    Yuusha
        2
    Yuusha  
       2023-02-21 08:26:05 +08:00 via iPhone
    这个很需要
    artee
        3
    artee  
       2023-02-21 08:28:51 +08:00
    ```
    brew scan-leftovers
    ==> 0 casks to scan ...
    ==> Installed from cask:

    ==> Installed from other ways:
    ```

    这是和 `homebrew` 使用 json 来更新包有关系?
    hcsu
        4
    hcsu  
       2023-02-21 08:30:13 +08:00
    谢谢
    jybox
        5
    jybox  
    OP
       2023-02-21 08:30:51 +08:00
    @artee 看起来可能是你没有使用过 Homebrew Cask ?所以本地没有 Cask 的数据库(它叫 Tap )。
    artee
        6
    artee  
       2023-02-21 08:41:22 +08:00   1
    ```
    brew list --cask
    alacritty font-lxgw-wenkai omniplan
    android-studio font-ubuntu-mono-nerd-font openmtp
    anki font-ubuntu-nerd-font raycast
    bartender fork shottr
    calibre google-chrome sloth
    chatgpt handbrake squirrel
    clashx-pro iina stretchly
    dash insomnia telegram
    drawio intellij-idea temurin
    firefox iterm2 topnotch
    fluor keka typora
    font-dejavu-sans-mono-nerd-font microsoft-office visual-studio-code
    font-fira-code-nerd-font microsoft-remote-desktop wireshark
    font-fira-mono-nerd-font obsidian zerotier-one
    font-jetbrains-mono-nerd-font omnigraffle zoom
    ```

    并不是,https://brew.sh/2023/02/16/homebrew-4.0.0/ 开始就可以不要下载 cask 的 git repo 了
    @jybox
    jybox
        7
    jybox  
    OP
       2023-02-21 08:45:25 +08:00
    好吧,原来 4.0.0 是上周才发布的,看来需要适配一下
    Ritter
        8
    Ritter  
       2023-02-21 09:25:17 +08:00
    Error: Unable to remove some files. Please enable Full Disk Access for your terminal under System Preferences → Security & Privacy → Privacy → Full Disk Access.
    Error: exit
    要打开完全访问么 应该选择哪个应用程序
    jybox
        9
    jybox  
    OP
       2023-02-21 10:20:06 +08:00
    @Ritter 开给你你的 Terminal
    Achieve7
        10
    Achieve7  
       2023-02-21 10:22:17 +08:00
    上周 Homebrew 更新了 4.0.x, 貌似需要适配一下
    guanguans
        11
    guanguans  
       2023-02-21 10:29:57 +08:00
    这个很有用,已 star 。
    Abirdcfly
        12
    Abirdcfly  
       2023-02-21 10:30:52 +08:00   1
    感谢感谢,大部分情况下是很有用的。

    很小部分情况下似乎有点问题,比如 jetbrains 系列都出现了,但是这些都是通过 https://www.jetbrains.com/toolbox-app/ 正常安装正在使用的。
    SimonOne
        13
    SimonOne  
       2023-02-21 11:05:04 +08:00
    OP ,卸载的软件信息留存在哪的?
    有些软件我在 brew 卸载了,然后单独安装了,也出现了,我想去 brew 了去掉卸载的信息,不然每次扫出来挺难看的。
    hackpro
        14
    hackpro  
       2023-02-21 11:59:08 +08:00
    >>> brew tap jysperm/leftover-scanner
    ==> Tapping jysperm/leftover-scanner
    Cloning into '/usr/local/Homebrew/Library/Taps/jysperm/homebrew-leftover-scanner'...
    remote: Enumerating objects: 28, done.
    remote: Counting objects: 100% (28/28), done.
    remote: Compressing objects: 100% (20/20), done.
    remote: Total 28 (delta 3), reused 28 (delta 3), pack-reused 0
    Receiving objects: 100% (28/28), 409.01 KiB | 1.36 MiB/s, done.
    Resolving deltas: 100% (3/3), done.
    Tapped 1 command (14 files, 852.5KB).

    >>> brew scan-leftovers
    Error: uninitialized constant CaskUnreadableError
    /usr/local/Homebrew/Library/Taps/jysperm/homebrew-leftover-scanner/cmd/brew-scan-leftovers.rb:22:in `rescue in block in get_all_casks'
    /usr/local/Homebrew/Library/Taps/jysperm/homebrew-leftover-scanner/cmd/brew-scan-leftovers.rb:21:in `block in get_all_casks'
    /usr/local/Homebrew/Library/Taps/jysperm/homebrew-leftover-scanner/cmd/brew-scan-leftovers.rb:20:in `map'
    /usr/local/Homebrew/Library/Taps/jysperm/homebrew-leftover-scanner/cmd/brew-scan-leftovers.rb:20:in `get_all_casks'
    /usr/local/Homebrew/Library/Taps/jysperm/homebrew-leftover-scanner/cmd/brew-scan-leftovers.rb:77:in `<top (required)>'
    /usr/local/Homebrew/Library/Homebrew/utils.rb:93:in `require'
    /usr/local/Homebrew/Library/Homebrew/utils.rb:93:in `require?'
    /usr/local/Homebrew/Library/Homebrew/brew.rb:95:in `<main>'

    大佬可以帮忙看看是啥问题吗
    SilencerL
        15
    SilencerL  
       2023-02-21 12:24:23 +08:00 via iPhone   1
    看到 OP 遥想当年的 RPHOST……那时候我才初中吧好像,转眼我都快 30 了 mmp ,不过 OP 应该也快 30 了
    zhangxu1621
        16
    zhangxu1621  
       2023-02-21 13:15:21 +08:00
    brew autoremove 不是也可以删除残留的依赖文件的吗
    pota
        17
    pota  
       2023-02-21 14:10:46 +08:00
    卧槽。不扫不知道。之前一直用 appcleaner 还有这么多残留
    ljsh093
        18
    ljsh093  
       2023-02-21 15:28:17 +08:00   1
    报个问题,如果终端分辨率不够宽的话,brew 后面的命令输出不全,出现如 brew unin 的情况
    norcm
        19
    norcm  
       2023-02-21 17:14:28 +08:00
    ,有用,感谢 OP !
    zuisong
        20
    zuisong  
       2023-02-21 17:36:23 +08:00
    谢谢, 很有用
    jybox
        21
    jybox  
    OP
       2023-02-22 01:02:51 +08:00   1
    @SimonOne @Abirdcfly
    这个脚本实际上需要先扫描到已安装的软件(会在最开头打印出来),通过 brew 安装的自然是简单;而其他安装来源的话(如官网下载)则是去检查目标路径(一般是 /Applications )下是否有同名的 .app 。所以像 JetBrains Toolbox 这种安装到其他路径(/Library/Application Support/JetBrains/Toolbox )暂时就检测不到了,我再想想有没有其他办法。
    GoRoad
        22
    GoRoad  
       2023-02-22 10:16:22 +08:00   1
    确实会出现命令打印不全的情况,比如 `brew uninstall --cask dbeaver-enterprise` ,只打印到了 `brew uninstall -f --zap dbeaver-enterpr`,而且这种情况挺常见
    Yuusha
        23
    Yuusha  
       2023-02-23 23:25:36 +08:00   1
    确实,经常有出现 brew uni 、brew uninsta 这种情况,希望大佬修复一下
    SimonOne
        24
    SimonOne  
       2023-02-24 11:16:15 +08:00
    @jybox #21 有一个 bug ,我的 clashx pro ( brew 的是 clashx ,不同名)的文件被扫出来是 clashx 的残留,但其实我没装 clashx 。bartender 3 被扫出来有残留,但 bartender 3 是我安装包手动安装的。

    这两个情况在我全新安装系统的 mac mini 也复现了,所以应该不是我先通过 brew 安装软件再卸载再自行安装包安装导致的。
    Comyn
        25
    Comyn  
       2023-02-26 01:33:41 +08:00   1
    很赞,但确实也遇到了命令打印不全的问题,以及已经按提示卸载但还是扫描出来的问题
    jybox
        26
    jybox  
    OP
       2023-03-01 00:57:19 +08:00   1
    @artee 你需要先运行一下 brew tap homebrew/cask 。就像前面有人提到的,Homebrew 4.0 开始不会默认把 cask 仓库 clone 到本地了 ...
    @hackpro 已经修复了,可以运行 brew update 更新到最新版本
    @ljsh093 @GoRoad @Yuusha @Comyn 感谢反馈,最新版本已拆分到两行来解决这个问题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3583 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 04:28 PVG 12:28 LAX 21:28 JFK 00:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86