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

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

Quiero desinstalar libreoffice. Este programa consta de unas tres docenas de módulos. Lo ideal sería eliminarlos 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 uso dpkgo apttambién

Respuesta1

  1. Utilice apt-geto apt(no aptitude) y utilice expresiones regulares ancladas.

  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, seguida de cualquier número de caracteres. Debe anclar la expresión regular con ^(para que coincida con el comienzo de la cadena) o $(para que coincida con el final de la cadena) o ambos; de lo contrario, APT no reconocerá la expresión regular.

  3. Rodee la expresión regular entre comillas simples para evitar que el shell interprete el asterisco.

Ejemplo:

Para eliminar todos los paquetes con un nombre que comienza con libreoffice, ejecute:

sudo apt remove '^libreoffice.*$'

Respuesta2

Una alternativa es:

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

Esto enumerará todos los paquetes que coinciden libreoffice. Cuando hayas confirmado que son todos los que deseas eliminar, ejecuta el siguiente comando...con cuidado:

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 coincidenlibreoffice
  3. Filtrar para mostrar solo la columna con el nombre del paquete
  4. Ejecute el comando de purga en cada uno de esos paquetes.

Respuesta3

Aptitude admite patrones globales y otras coincidencias interesantes como esta:

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

Esto coincidirá con cualquier paquete que tenga su nombre libreofficey 3.6que también esté instalado (eso es lo que ~isignifica.

Respuesta4

Cuando necesitas eliminar muchos archivos que tienen el mismo prefijo, la expansión de llaves me resulta muy útil:

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}

Utilicé este comando para eliminar todos los paquetes de idiomas que nunca uso. Sí, con una expresión regular puedes saber cuál conservar y eliminar las demás. De todos modos, me gusta esto porque es fácil de recordar y también funciona con muchos comandos bash.

información relacionada