如何刪除與特定模式相符的所有套件?

如何刪除與特定模式相符的所有套件?

我想卸載 libreoffice。該程式由大約三打模組組成。理想情況下,可以透過以下方式刪除它們:

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

但這失敗了

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

ETC。

如何按模式刪除一組套件?

PS:我也對 usedpkg或 的答案感到高興apt

答案1

  1. 使用apt-getor apt, (not 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. 對每個包執行 purge 指令

答案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 指令。

相關內容