我想卸载 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
使用
apt-get
或apt
,(非aptitude
),并使用锚定正则表达式。在正则表达式中,
.
表示任意字符,而*
表示零次或多次。因此,该表达式libreoffice.*
匹配任何包含字符串 的软件包名称,后跟任意数量的字符。您必须使用(以匹配字符串的开头)或(以匹配字符串的结尾)或两者libreoffice
来固定正则表达式,否则,APT 将无法识别该正则表达式。^
$
用单引号将正则表达式括起来,以避免 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
想法:
- 让系统列出所有已安装的软件包
- 过滤仅显示匹配项
libreoffice
- 过滤仅显示带有包名称的列
- 对每个包运行清除命令
答案3
Aptitude 支持全局模式,还有另一个非常酷的匹配,例如:
aptitude remove '?and(?name(libreoffice), name(3.6), ~i)' libreoffice-debian-menus
这将匹配任何名称中包含 并且已安装的包libreoffice
(3.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 命令。