Comment supprimer tous les packages correspondant à un certain modèle?

26

Je veux désinstaller libreoffice. Ce programme comprend environ trois douzaines de modules. Idéalement, ils pourraient être retirés avec:

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

mais cela échoue avec

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

etc.

Comment supprimer un ensemble de packages par modèle?

PS: je suis content des réponses à l'usage dpkgou aptaussi

Aaron Digulla
la source
Essayez-vous de connaître la réponse à propos de certains modèles ou êtes-vous satisfait de la suppression des composants LibreOffice?
Anwar
1
doublon possible de Comment désinstaller LibreOffice? La réponse est probabaly: cela ne fonctionne que pour 3.6 et vous n'utilisez pas 3.6 :-)
Rinzwind
J'utilise libreoffice comme exemple car il contient tellement de parties. Mais j'ai eu le même problème avec le noyau (nettoyage des anciennes versions)
Aaron Digulla

Réponses:

26
  1. Utilisez apt-get, pas aptitudeet utilisez des expressions régulières.

  2. Dans une expression régulière, .signifie n'importe quel caractère et *signifie zéro ou plusieurs fois. Ainsi, l'expression libreoffice.*correspond à tout nom de package contenant la chaîne libreoffice, suivi d'un nombre quelconque de caractères.

  3. Entourez l'expression régulière de guillemets simples pour éviter que le shell interprète l'astérisque. (Si vous aviez un fichier nommé libreoffice.examplepar exemple dans votre répertoire actuel, le shell serait remplacé libreoffice.*par libreoffice.example, vous devez donc utiliser des guillemets simples pour arrêter ce comportement.)

Résultat:

sudo apt-get remove 'libreoffice.*'
Flimm
la source
Merci, ça marche. Chose intéressante, cela fonctionne également avec le motif libreoffice*(c'est-à-dire les motifs de style glob) qui me déroute un peu parce que l'un ou l'autre ne devrait pas fonctionner :-)
Aaron Digulla
3
Pour ceux qui veulent tester cela, utilisez l'option --dry-runpour voir ce qui serait supprimé sans aucune modification du système.
Aaron Digulla
@AaronDigulla Ne connaissait pas encore --dry-run. Cela vous sera utile! Merci!
Glutanimate
apt-get est également assez mauvais pour gérer les expressions régulières, comparez les deux solutions dans cette réponse .
Braiam
Pour être clair, aptutilise des expressions régulières POSIX. De man apt-get(Debian Jessie): "Si aucun paquet ne correspond à l'expression donnée et que l'expression contient l'un de '.', '?' ou '*' alors on suppose qu'il s'agit d'une expression régulière POSIX ... "
x-yuri
6

Une alternative est:

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

Cela répertoriera tous les packages correspondants libreoffice. Lorsque vous avez confirmé que ce sont tous ceux dont vous souhaitez vous débarrasser, exécutez la commande suivante ... avec prudence :

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

L'idée:

  1. Obtenez le système pour répertorier tous les packages installés
  2. Filtrez pour n'afficher que ceux qui correspondent libreoffice
  3. Filtre pour afficher uniquement la colonne avec le nom du package
  4. Exécutez la commande de purge sur chacun de ces packages
aalaap
la source
1
peut-être pourriez-vous suggérer d'ajouter l' -poption de sorte que vous xargsserez invité à confirmer avant d'exécuter chaque commande construite, ou de vérifier d'abord avec echoau lieu desudo apt-get purge
Zanna
1
@Zanna -paiderait, mais ce ne serait pas une commande ponctuelle . J'ai utilisé des échos pour tester ce que j'obtenais avant d'exécuter la commande, donc cela vaut la peine de le recommander.
aalaap
2
Je peux vous donner +1 maintenant que vous l'avez rendu plus sûr :)
Zanna
Je pense que -n1c'est bon pour le echomais vous devez le retirer de la purge; sinon, l'ordre de dépendance (a dépend de b, essaie de supprimer b en premier) peut interrompre la purge.
Aaron Digulla
Votre solution est la meilleure que j'ai trouvée jusqu'à présent, merci.
João Pedro
5

Aptitude prend en charge les modèles globaux et d'autres correspondances assez intéressantes comme celle-ci:

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

Cela correspondra à un paquet qui a dans son nom libreofficeet 3.6aussi il est installé (c'est ce que les ~ireprésente.

Braiam
la source