Come posso eliminare tutti i pacchetti che corrispondono a un determinato modello?


26

Voglio disinstallare libreoffice. Questo programma è composto da circa tre dozzine di moduli. Idealmente, potrebbero essere rimossi con:

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

ma questo fallisce

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

eccetera.

Come posso eliminare un set di pacchetti per modello?

PS: Sono contento delle risposte con l'uso dpkgo aptanche


Stai cercando di conoscere la risposta su un determinato schema o sei soddisfatto della rimozione dei componenti di LibreOffice?
Anwar,

1
possibile duplicato di Come disinstallare LibreOffice? La risposta è probabaly: funziona solo per 3.6 e non stai usando 3.6 :-)
Rinzwind

Sto usando libreoffice come esempio perché contiene così tante parti. Ma ho avuto lo stesso problema con il kernel (ripulendo le vecchie versioni)
Aaron Digulla

Risposte:


26
  1. Usa apt-get, non aptitudee usa espressioni regolari.

  2. In un'espressione regolare, .indica qualsiasi carattere e *significa zero o più volte. Quindi l'espressione libreoffice.*corrisponde a qualsiasi nome di pacchetto contenente la stringa libreoffice, seguito da un numero qualsiasi di caratteri.

  3. Circonda l'espressione regolare tra virgolette singole per evitare che la shell interpreti l'asterisco. (Se tu avessi un file chiamato libreoffice.examplead esempio nella directory corrente, il guscio avrebbe sostituito libreoffice.*con libreoffice.example, quindi è necessario utilizzare le virgolette singole per fermare questo comportamento.)

Risultato:

sudo apt-get remove 'libreoffice.*'

Grazie, funziona. È interessante notare che funziona anche con il modello libreoffice*(cioè i modelli in stile glob) che mi confonde un po 'perché nessuno dei due dovrebbe funzionare :-)
Aaron Digulla

3
Per coloro che desiderano testarlo, utilizzare l'opzione --dry-runper vedere cosa verrebbe eliminato senza alcuna modifica al sistema.
Aaron Digulla,

@AaronDigulla Non sapevo ancora di --dry-run. Sarà utile! Grazie!
Glutanimate,

apt-get è anche abbastanza male nella gestione delle espressioni regolari, confronta entrambe le soluzioni in questa risposta .
Braiam

Per chiarire, aptusa le espressioni regolari POSIX. Da man apt-get(Debian Jessie): "Se nessun pacchetto corrisponde all'espressione data e l'espressione contiene una di '.', '?' o '*', quindi si presume che sia un'espressione regolare POSIX ... "
x-yuri,

6

Un'alternativa è:

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

Questo elencherà tutti i pacchetti corrispondenti libreoffice. Quando hai confermato che sono tutti quelli che desideri eliminare, esegui il seguente comando ... con cautela :

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

L'idea:

  1. Ottieni il sistema per elencare tutti i pacchetti installati
  2. Filtro per mostrare solo quelli corrispondenti libreoffice
  3. Filtro per mostrare solo la colonna con il nome del pacchetto
  4. Esegui il comando purge su ciascuno di quei pacchetti

1
forse potresti suggerire di aggiungere l' -popzione in modo che xargsti chieda conferma prima di eseguire ogni comando costruito, o prima di verificare con echoinvece disudo apt-get purge
Zanna

1
@Zanna -psarebbe d'aiuto, ma non sarebbe un comando one-shot. Ho usato echos per testare quello che stavo ottenendo prima di eseguire il comando, quindi vale la pena consigliarlo.
aalaap,

2
Posso darti +1 ora lo hai reso più sicuro :)
Zanna,

Penso che -n1sia buono per il echoma devi rimuoverlo dalla purga; in caso contrario, l'ordine di dipendenza (a dipende da b, tenta di eliminare prima b) potrebbe interrompere l'eliminazione.
Aaron Digulla,

La tua soluzione è la migliore che abbia trovato fino ad ora, grazie.
João Pedro,

5

Aptitude ha il supporto per modelli globali, e un altro match abbastanza bello come questo:

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

Ciò corrisponderà a qualsiasi pacchetto che ha nel suo nome libreofficee 3.6anche la sua installazione (che è quello che le ~irappresenta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.