当前位置: 首页>>技术教程>>正文


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

,

问题描述

我想卸载 libreoffice。该程序由大约三打模块组成。理想情况下,可以通过以下方式删除它们:

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

但这失败了

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

等等。

如何按模式删除一组包?

PS:我也很高兴使用 dpkgapt 的答案

最佳方案

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

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

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

结果:

sudo apt-get remove 'libreoffice.*'

次佳方案

另一种选择是:

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 命令

第三种方案

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

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

这将匹配名称为 libreoffice3.6 并且已安装的任何包(这就是 ~i 的含义。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12575.html,未经允许,请勿转载。