仅更新某些 Arch 某些软件包

仅更新某些 Arch 某些软件包

我们如何使用 pacman 更新某些特定的软件包?

例如,我们如何仅更新包(使用正则表达式语法) py.+ 为:

$ sudo pacman -S 'py.+' 
error: target not found: py.+

不起作用
请帮忙,提前致谢

答案1

请注意,在 Arch Linux 上,不支持部分升级;您应该始终立即升级整个系统(pacman -Syu)并在安装新软件包时升级整个系统()。将安装以下版本pacman -Syu package
pacman -S packagepackage当前位于您的同步数据库中,可能会重新安装已安装的版本。
pacman -Sy接下来将更新同步数据库,然后安装最新版本pacman -S packagepackage 及其依赖项,可能会破坏依赖于后者旧版本的其他已安装软件包。
正如上面链接的 wiki 页面中所述,pacman -Syuw紧随其后也不是解决方案。pacman -S package

也就是说,基于拱门维基,提供pacman包列表作为参数的常见方法是使用另一个pacman实例生成它。例如,要获取有关名称的已安装软件包列表的详细信息或描述1py以(但不只是)开头py,过滤掉外来的:

pacman -Qsq '^py[^ ]+$' | xargs pacman -Qnq | xargs -o pacman -Si

wherexargs用于避免“参数列表太长”错误。

在处理包名称时,假设它们不包含空格、引号、通配符或其他不常见的字符是安全的。否则,不加引号的命令替换可能是一个坏主意2;只需确保 的值IFS不包含包名称中可能出现的任何字符。

非标准xargs选项-o(通常在 Arch Linux 上可用,默认情况下提供其 GNU 实现),它告诉xargs重新打开标准输入并使其可用于执行的命令,在运行需要用户交互的命令/dev/tty时是必要的(尽管pacman在上面的例子中实际上并不需要)。

或者,如果您确信搜索返回的包数量会很小,您可以使用嵌套命令替换:

pacman -Si $(pacman -Qnq $(pacman -Qsq '^py[^ ]+$'))

1 可能需要其他实用程序来执行正则表达式搜索名字仅,例如pacsift(来自帕西里斯) 或者expac。请注意,pacman搜索选项还会检查包的“提供”字段。

2 参见什么时候需要双引号?,为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?忘记在 bash/POSIX shell 中引用变量的安全隐患

答案2

它是受支持的,您可以只使用 --ignore package1,package2 并忽略所有内容

所以 sudo 或 doas pacman -Syu --ignore vim,firefox,linux

相关内容