如何删除所有与特定模式匹配的软件包?


26

我想卸载libreoffice。该程序包括大约三打模块。理想情况下,可以使用以下方法将其删除:

aptitude remove libreoffice3.6* libreoffice-debian-menus libobasis3.6-*

但这失败了

Couldn't find any package whose name or description matched "libreoffice3.6*"

等等

如何按模式删除一组软件包?

PS:我很高兴与使用的答案dpkg还是apt,太


您是要了解有关某些模式的答案还是对删除LibreOffice组件感到满意?
Anwar

1
如何卸载LibreOffice的可能重复项答案很可能是:这仅适用于3.6,而您没有使用3.6 :-)
Rinzwind 2013年

我以libreoffice为例,因为它包含了很多部分。但是我在内核上也遇到了同样的问题(清理旧版本)
Aaron Digulla 2013年

Answers:


26
  1. 使用apt-get,不使用,aptitude并使用正则表达式。

  2. 在正则表达式中,.表示任何字符,并且*表示零次或多次。因此,表达式libreoffice.*匹配包含字符串的任何包名称libreoffice,后跟任意数量的字符。

  3. 将正则表达式用单引号引起来,以避免shell解释星号。(如果您libreoffice.example在当前目录中有一个名为例如文件的文件,则外壳程序将替换libreoffice.*libreoffice.example,因此您必须使用单引号将其停止。)

结果:

sudo apt-get remove 'libreoffice.*'

谢谢,这有效。有趣的是,它也适用于模式libreoffice*(即全局样式模式),这使我有些困惑,因为它们中的任何一个都不起作用:-)
Aaron Digulla

3
对于那些想对此进行测试的人,请使用该选项--dry-run来查看将删除的内容,而无需对系统进行任何更改。
亚伦·迪古拉

@AaronDigulla还不了解--dry-run。那将派上用场!谢谢!
Glutanimate

apt-get也很难处理正则表达式,请在此答案中比较两个解决方案。
Braiam

为了清楚apt起见,请使用POSIX正则表达式。来自man apt-get(Debian Jessie):“如果没有包与给定的表达式匹配,并且该表达式包含'。','?'之一 或'*',则假定它是POSIX正则表达式...”
x-yuri

6

一种替代方法是:

dpkg -l | grep libreoffice | awk '{print $2}' | xargs -n1 echo

这将列出所有匹配的软件包libreoffice。当您确认它们都是您要摆脱的对象时,请谨慎运行以下命令... :

dpkg -l | grep libreoffice | awk '{print $2}' | xargs -n1 sudo apt-get purge -y

这个想法:

  1. 获取系统以列出所有已安装的软件包
  2. 过滤以仅显示匹配的那些 libreoffice
  3. 过滤以仅显示具有包名称的列
  4. 在每个软件包上运行purge命令

1
也许您可以建议添加该-p选项,以便xargs在执行每个构造的命令之前提示您进行确认,或者先进行检查echo而不是sudo apt-get purge
Zanna 2016年

1
@Zanna -p会有所帮助,但这不是一个命令。在运行命令之前,我确实使用过回声来测试我得到了什么,因此值得推荐。
aalaap '16

2
现在我可以给您+1了,您让它变得更安全了:)
Zanna

我认为这样做对-n1有益,echo但是您必须将其从清除中删除。否则,依赖顺序(a取决于b,首先尝试删除b)可能会中断清除。
亚伦·迪古拉

您的解决方案是迄今为止我找到的最好的解决方案,谢谢。
若奥·佩德罗

5

Aptitude支持全局模式,还有另一个非常酷的匹配,例如:

aptitude remove '?and(?name(libreoffice), name(3.6), ~i)' libreoffice-debian-menus

这将匹配名称中包含libreoffice3.6已安装的任何软件包(这就是其含义)~i

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.