Wie lösche ich alle Pakete, die einem bestimmten Muster entsprechen?

Wie lösche ich alle Pakete, die einem bestimmten Muster entsprechen?

Ich möchte LibreOffice deinstallieren. Dieses Programm besteht aus etwa drei Dutzend Modulen. Idealerweise könnten sie mit folgendem entfernt werden:

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

aber das scheitert mit

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

usw.

Wie lösche ich einen Paketsatz nach Muster?

PS: Ich freue mich auch über Antworten mit use dpkgoder .apt

Antwort1

  1. Verwenden Sie apt-getoder apt, (nicht aptitude) und verwenden Sie verankerte reguläre Ausdrücke.

  2. In einem regulären Ausdruck .bedeutet und jedes beliebige Zeichen und *bedeutet null oder mehr Mal. Der Ausdruck libreoffice.*stimmt also mit jedem Paketnamen überein, der die Zeichenfolge gefolgt von einer beliebigen Anzahl von Zeichen enthält . Sie müssen den regulären Ausdruck mit (um den Anfang der Zeichenfolge abzugleichen) oder (um das Ende der Zeichenfolge abzugleichen) oder beidem libreofficeverankern , andernfalls wird der reguläre Ausdruck von APT nicht erkannt.^$

  3. Umgeben Sie den regulären Ausdruck mit einfachen Anführungszeichen, um zu verhindern, dass die Shell das Sternchen interpretiert.

Beispiel:

Um alle Pakete zu entfernen, deren Name mit beginnt libreoffice, führen Sie Folgendes aus:

sudo apt remove '^libreoffice.*$'

Antwort2

Eine Alternative ist:

dpkg -l | grep libreoffice | awk '{print $2}' | xargs -n1 echo

Dadurch werden alle passenden Pakete aufgelistet libreoffice. Wenn Sie bestätigt haben, dass dies alle sind, die Sie entfernen möchten, führen Sie den folgenden Befehl aus ...mit Vorsicht:

dpkg -l | grep libreoffice | awk '{print $2}' | xargs -n1 sudo apt-get purge -y

Die Idee:

  1. Lassen Sie das System alle installierten Pakete auflisten
  2. Filtern, um nur die Übereinstimmungen anzuzeigenlibreoffice
  3. Filtern Sie, um nur die Spalte mit dem Paketnamen anzuzeigen
  4. Führen Sie den Bereinigungsbefehl für jedes dieser Pakete aus

Antwort3

Aptitude unterstützt globale Muster und weitere ziemlich coole Übereinstimmungen wie diese:

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

Dies stimmt mit jedem Paket überein, das in seinem Namen libreofficeund enthält 3.6und auch installiert ist (dafür steht das ) ~i.

Antwort4

Wenn Sie viele Dateien mit demselben Präfix entfernen müssen, finde ich die Klammererweiterung sehr praktisch:

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}

Ich habe diesen Befehl verwendet, um alle Sprachpakete zu entfernen, die ich nie verwende. Ja, mit einem regulären Ausdruck können Sie angeben, welche Sie behalten möchten, und die anderen löschen. Jedenfalls gefällt mir das, weil es leicht zu merken ist und auch mit vielen Bash-Befehlen funktioniert.

verwandte Informationen