¿Cómo elimino todos los paquetes que coinciden con cierto patrón?

26

Quiero desinstalar libreoffice. Este programa consta de aproximadamente tres docenas de módulos. Idealmente, podrían eliminarse con:

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

pero eso falla con

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

etc.

¿Cómo elimino un conjunto de paquetes por patrón?

PD: estoy contento con las respuestas con el uso dpkgo apt, también

Aaron Digulla
fuente
¿Estás tratando de saber la respuesta sobre cierto patrón o estás contento con la eliminación de los componentes de LibreOffice?
Anwar
1
posible duplicado de ¿Cómo desinstalar LibreOffice? La respuesta es probablemente: esto solo funciona para 3.6 y no está utilizando 3.6 :-)
Rinzwind
Estoy usando libreoffice como ejemplo porque contiene muchas partes. Pero tuve el mismo problema con el núcleo (limpieza de versiones anteriores)
Aaron Digulla

Respuestas:

26
  1. Usa apt-get, no aptitude, y usa expresiones regulares.

  2. En una expresión regular, .significa cualquier carácter y *significa cero o más veces. Entonces, la expresión libreoffice.*coincide con cualquier nombre de paquete que contenga la cadena libreoffice, seguido de cualquier número de caracteres.

  3. Rodee la expresión regular con comillas simples para evitar que el shell interprete el asterisco. (Si tuviera un archivo llamado, libreoffice.examplepor ejemplo, en su directorio actual, el shell se reemplazaría libreoffice.*con libreoffice.example, por lo que debe usar comillas simples para detener este comportamiento).

Resultado:

sudo apt-get remove 'libreoffice.*'
Flimm
fuente
Gracias, esto funciona. Curiosamente, también funciona con el patrón libreoffice*(es decir, patrones de estilo glob) que me confunde un poco porque ninguno de los dos debería funcionar :-)
Aaron Digulla
3
Para aquellos que quieran probar esto, use la opción --dry-runpara ver qué se eliminaría sin ningún cambio en el sistema.
Aaron Digulla
@AaronDigulla No sabía sobre --dry-run todavía. ¡Eso será util! ¡Gracias!
Glutanimato
apt-get es bastante malo para manejar expresiones regulares también, compara ambas soluciones en esta respuesta .
Braiam
Para que quede claro, aptutiliza expresiones regulares POSIX. De man apt-get(Debian Jessie): "Si ningún paquete coincide con la expresión dada y la expresión contiene uno de '.', '?' o '*', entonces se supone que es una expresión regular POSIX ... "
x-yuri
6

Una alternativa es:

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

Esto enumerará todos los paquetes que coinciden libreoffice. Cuando haya confirmado que son todos de los que desea deshacerse, ejecute el siguiente comando ... con precaución :

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

La idea:

  1. Haga que el sistema enumere todos los paquetes instalados
  2. Filtrar para mostrar solo los que coinciden libreoffice
  3. Filtre para mostrar solo la columna con el nombre del paquete
  4. Ejecute el comando de purga en cada uno de esos paquetes
aalaap
fuente
1
tal vez usted podría sugerir la adición de la -popción para que xargsle pedirá confirmación antes de ejecutar cada comando construido, o consultar primero con echosu lugar desudo apt-get purge
Zanna
1
@Zanna -payudaría, pero no sería un comando de una sola vez. Utilicé echos para probar lo que estaba obteniendo antes de ejecutar el comando, por lo que vale la pena recomendarlo.
aalaap
2
Puedo darte +1 ahora que lo hiciste más seguro :)
Zanna
Creo que -n1es bueno para el echopero hay que eliminarlo de la purga; de lo contrario, el orden de dependencia (a depende de b, intenta eliminar b primero) podría romper la purga.
Aaron Digulla
Su solución es la mejor que he encontrado hasta ahora, gracias.
João Pedro el
5

Aptitude tiene soporte para patrones globales, y otros partidos geniales como este:

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

Esto coincidirá con cualquier paquete que tiene en su nombre libreofficey 3.6también está instalado (eso es lo que los ~irepresenta.

Braiam
fuente