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


26

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

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*"

etc.

Wie lösche ich eine Reihe von Paketen nach Muster?

PS: Ich freue mich über Antworten mit dpkgoder aptauch


Versuchen Sie, die Antwort auf ein bestimmtes Muster zu finden, oder sind Sie mit dem Entfernen der LibreOffice-Komponenten zufrieden?
Anwar

1
mögliches Duplikat von Wie deinstalliere ich LibreOffice? Die Antwort ist wahrscheinlich: Dies funktioniert nur für 3.6 und Sie verwenden 3.6 nicht :-)
Rinzwind

Ich verwende libreoffice als Beispiel, weil es so viele Teile enthält. Aber ich hatte das gleiche Problem mit dem Kernel (alte Versionen
bereinigen

Antworten:


26
  1. Verwenden Sie apt-getnicht aptitudeverwenden und reguläre Ausdrücke.

  2. Bedeutet in einem regulären Ausdruck ein .beliebiges Zeichen und *bedeutet null oder mehrmals. Der Ausdruck libreoffice.*stimmt also mit jedem Paketnamen überein, der die Zeichenfolge enthält libreoffice, gefolgt von einer beliebigen Anzahl von Zeichen.

  3. Umgeben Sie den regulären Ausdruck mit einfachen Anführungszeichen, damit die Shell den Stern nicht interpretiert. (Wenn Sie eine Datei mit dem Namen haben libreoffice.examplezum Beispiel im aktuellen Verzeichnis, würde die Schale ersetzen libreoffice.*mit libreoffice.example, so dass Sie dieses Verhalten einfache Anführungszeichen verwenden , müssen aufhören.)

Ergebnis:

sudo apt-get remove 'libreoffice.*'

Danke, das funktioniert. Interessanterweise funktioniert es auch mit dem Muster libreoffice*(dh Muster im Glob-Stil), was mich ein bisschen verwirrt, weil eines von beiden nicht funktionieren sollte :-)
Aaron Digulla

3
Verwenden Sie für diejenigen, die dies testen möchten, die Option, um --dry-runzu sehen, was ohne Änderungen am System gelöscht werden würde.
Aaron Digulla

@AaronDigulla Wusste noch nichts von --dry-run. Das wird nützlich sein! Vielen Dank!
Glutanimate

apt-get ist auch ziemlich schlecht im Umgang mit regulären Ausdrücken. Vergleichen Sie beide Lösungen in dieser Antwort .
Braiam

Um es klar zu machen, aptverwendet POSIX reguläre Ausdrücke. Von man apt-get(Debian Jessie): "Wenn kein Paket mit dem angegebenen Ausdruck übereinstimmt und der Ausdruck eines von '.', '?' oder '*', dann wird angenommen, dass es sich um einen regulären POSIX-Ausdruck handelt ... "
x-yuri

6

Eine Alternative ist:

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

Dies listet alle passenden Pakete auf libreoffice. Wenn Sie bestätigt haben, dass es sich nur um diejenigen handelt, die Sie entfernen möchten, führen Sie den folgenden Befehl mit Vorsicht aus :

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 passenden anzuzeigen libreoffice
  3. Filtern, um nur die Spalte mit dem Paketnamen anzuzeigen
  4. Führen Sie den Befehl purge für jedes dieser Pakete aus

1
vielleicht könnten Sie das Hinzufügen vorschlagen -pOption , so dass xargseine Bestätigung vor der Ausführung jeder Befehl aufgebaut auffordern wird, oder zuerst mit der Überprüfung echostattsudo apt-get purge
Zanna

1
@Zanna -pwürde helfen, aber es wäre kein One-Shot-Befehl. Ich habe Echos verwendet, um zu testen, was ich vor dem Ausführen des Befehls erhalten habe. Daher ist es empfehlenswert, dies zu empfehlen.
Aalaap

2
Ich kann dir +1 geben, jetzt hast du es sicherer gemacht :)
Zanna

Ich denke, das -n1ist gut für die, echoaber Sie müssen es aus der Säuberung entfernen; Andernfalls kann die Abhängigkeitsreihenfolge (a hängt von b ab, versucht zuerst, b zu löschen) die Bereinigung unterbrechen.
Aaron Digulla

Ihre Lösung ist die beste, die ich bis jetzt gefunden habe, danke.
João Pedro

5

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

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

Dies stimmt mit jedem Paket überein, das im Namen libreofficeund 3.6auch in der Installation enthalten ist (das ist das, wofür ~isteht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.