在 Msys2 中安装 paccache 来清理安装程序存储

在 Msys2 中安装 paccache 来清理安装程序存储

我的意思是从 Win10 下的 Portable Msys2 中删除大量可能无用的安装程序(我目前已“固定”了 3.5Gb)。我可能会保留最新版本,至少是一些安装程序。

要做到这一点,我的意思是安装paccache

$ pacman -S paccache
error: target not found: paccache

另一方面,我发现 https://github.com/Alexpux/MSYS2-pacman/blob/master/contrib/paccache.sh.in

我该如何使用它paccache

使用paccache相当于

$ cd /var/cache/pacman/pkg/
$ rm python3-pip-10.0.1-1-any.pkg.tar.xz
$ rm ...

以更加灵活/精细的方式,还是执行任何额外的操作?

答案1

paccache脚本已放置在 中/usr/bin/paccache。它由 msys2 安装程序使用 pacman(msys2/mingw-w64 工具链中的默认包管理器)安装。有关更多详细信息,请参阅msys2-软件包/pacman存储库。

答案2

找不到的问题paccache很简单。出于某种原因,我没有找到paccache(我不记得我是否尝试过pacc+tab-completion,它会给我paccache,然后是which paccache)。密钥由此评论(添加为回答稍后),这表明我已经有了paccache。我可能需要更新一些数据库(当然,至少需要更新pkgfile,见下文)。

paccache我首先希望在包中找到paccache,然后在包中找到pacman-contrib作为单独的包来自pacman。但我没有找到pacman-contrib。我一定是搜索错了(或者我现在有一些数据库与几天前相比有所更新,我不确定),因为

$ pacman -Q pacman
pacman 5.1.2-2
$ pacman -Q pacman-contrib
pacman 5.1.2-2

并且,

$ pkgfile -s /usr/bin/paccache
error: No repo files found. Please run `pkgfile --update'.
$ pkgfile --update
:: Updating 3 repos...
  download complete: msys                 [   951.1 KiB  61.2K/s  2 remaining]
  download complete: mingw32              [     3.5 MiB  81.6K/s  1 remaining]
  download complete: mingw64              [     3.5 MiB  73.1K/s  0 remaining]
:: download complete in 49.44s            <     8.0 MiB   165K/s  3 files    >
:: waiting for 1 process to finish repacking repos...
$ pkgfile -s /usr/bin/paccache
msys/pacman
$ pacman -Qo paccache
/usr/bin/paccache is owned by pacman 5.1.2-2

至于如何使用paccache,我之前确实找到了几个很好的链接,包括那些由 harrymc 发布

现在一切都清楚了,除了:

  1. (模棱两可的?) 描述pacmanpacman-contrib

  2. 是否paccache完全相当于一种经过微调的rm仅替换命令的方式。

答案3

根据 文档,Paccache 脚本由 Pacman 包本身提供,可以在 中找到 /usr/bin/paccache,因此您根本不必安装它。

其用法说明如下:

pacman-contrib 包中提供的 paccache 脚本默认会删除所有已安装和已卸载包的缓存版本(最近的 3 个除外):

# paccache -r

您还可以定义要保留多少个最近版本。若要仅保留一个过去版本,请使用:

# paccache -rk1

添加 u 开关以限制 paccache 的操作仅限于未安装的软件包。例如,要删除所有已卸载软件包的缓存版本,请使用以下命令:

# paccache -ruk0

查看paccache -h更多选项。

文章中提供了使用该包的教程
在 Arch Linux 中清理软件包缓存的推荐方法

由于文档全部针对 Linux,因此当您在 Windows 上运行 Msys2 时,某些文档可能不适用于您的环境。

对于你的问题,如果paccache只相当于一堆rm 命令,那么包 MSYS2-pacman 以如下代码终止:

if (( delete )); then
    printf '%s\0' "${candidates[@]}" | runcmd xargs -0 rm "${cmdopts[@]}"
    [...]
fi

所以,是的,它所做的就是发出rm命令。

相关内容