我的意思是从 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 发布。
现在一切都清楚了,除了:
(模棱两可的?) 描述
pacman
与pacman-contrib
。是否
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
命令。