如何删除所有符合特定模式的包?

如何删除所有符合特定模式的包?

我想卸载 libreoffice。该程序包含大约三十多个模块。理想情况下,可以使用以下命令删除它们:

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

但失败了

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

ETC。

如何按模式删除一组包?

附言:我对使用dpkg或的答案apt也很满意

答案1

  1. 使用apt-getapt,(非aptitude),并使用锚定正则表达式。

  2. 在正则表达式中,.表示任意字符,而*表示零次或多次。因此,该表达式libreoffice.*匹配任何包含字符串 的软件包名称,后跟任意数量的字符。您必须使用(以匹配字符串的开头)或(以匹配字符串的结尾)或两者libreoffice来固定正则表达式,否则,APT 将无法识别该正则表达式。^$

  3. 用单引号将正则表达式括起来,以避免 shell 解释星号。

例子:

要删除所有以 开头的软件包libreoffice,请运行:

sudo apt remove '^libreoffice.*$'

答案2

另一种方法是:

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. 对每个包运行清除命令

答案3

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

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

这将匹配任何名称中包含 并且已安装的包libreoffice3.6这就是 的意思~i

答案4

当您需要删除许多具有相同前缀的文件时,我发现括号扩展非常方便:

sudo apt remove libreoffice-l10n-{bg,ca,cs,da,de,en-za,es,fr,hu,id,ja,ko,nb,nl,pl,pt,ru,sv,th,tr,uk,vi,zh-cn,zh-tw}

我使用此命令删除了所有从未使用过的语言包。是的,使用正则表达式,您可以确定要保留哪个语言包,然后删除其他语言包。无论如何,我喜欢这个命令,因为它很容易记住,并且它也适用于许多 bash 命令。

相关内容