问题描述
我想卸载 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
的答案
最佳方案
-
使用
apt-get
,而不是aptitude
,并使用正则表达式。 -
在正则表达式中,
.
表示任意字符,*
表示零次或多次。因此,表达式libreoffice.*
匹配包含字符串libreoffice
的任何包名称,后跟任意数量的字符。 -
用单引号将正则表达式括起来,以避免 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
想法:
-
让系统列出所有已安装的软件包
-
过滤以仅显示匹配
libreoffice
的那些 -
过滤以仅显示具有包名称的列
-
在每个包上运行 purge 命令
第三种方案
Aptitude 支持全局模式,还有一个非常酷的匹配,如下所示:
aptitude remove '?and(?name(libreoffice), name(3.6), ~i)' libreoffice-debian-menus
这将匹配名称为 libreoffice
和 3.6
并且已安装的任何包(这就是 ~i
的含义。