Como excluo todos os pacotes que correspondem a um determinado padrão?


26

Eu quero desinstalar o libreoffice. Este programa consiste em cerca de três dezenas de módulos. Idealmente, eles podem ser removidos com:

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

mas isso falha com

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

etc.

Como faço para excluir um conjunto de pacotes por padrão?

PS: Estou feliz com as respostas com o uso dpkgou apt, também


Você está tentando saber a resposta sobre determinado padrão ou satisfeito com a remoção dos componentes do LibreOffice?
Anwar #

1
possível duplicata de Como desinstalar o LibreOffice? A resposta é probabaly: isso só funciona para 3.6 e você não estiver usando 3.6 :-)
Rinzwind

Estou usando o libreoffice como exemplo, pois contém muitas partes. Mas eu tive o mesmo problema com o kernel (limpeza versões antigas)
Aaron Digulla

Respostas:


26
  1. Use apt-get, não aptitudee use expressões regulares.

  2. Em uma expressão regular, .significa qualquer caractere e *significa zero ou mais vezes. Portanto, a expressão libreoffice.*corresponde a qualquer nome de pacote que contenha a sequência libreoffice, seguido por qualquer número de caracteres.

  3. Coloque a expressão regular entre aspas simples para evitar que o shell interprete o asterisco. (Se você tivesse um arquivo nomeado, libreoffice.examplepor exemplo, no diretório atual, o shell seria substituído libreoffice.*por libreoffice.example, então você precisará usar aspas simples para interromper esse comportamento.)

Resultado:

sudo apt-get remove 'libreoffice.*'

Obrigado, isso funciona. Curiosamente, ele também funciona com o padrão libreoffice*(padrões de estilo ou seja glob), que me confunde um pouco, porque qualquer um deles não deve trabalho :-)
Aaron Digulla

3
Para quem deseja testar isso, use a opção --dry-runpara ver o que seria excluído sem nenhuma alteração no sistema.
Aaron Digulla 04/04

@AaronDigulla Ainda não sabia sobre --dry-run. Isso será útil! Obrigado!
amigos estão dizendo sobre glutanimato

O apt-get também é muito ruim para lidar com expressões regulares, compare as duas soluções nesta resposta .
Braiam

Para deixar claro, aptusa expressões regulares POSIX. From man apt-get(Debian Jessie): "Se nenhum pacote corresponder à expressão fornecida e a expressão contiver um de '.', '?' ou '*', então é assumido que é uma expressão regular POSIX ... "
x-yuri

6

Uma alternativa é:

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

Isso listará todos os pacotes correspondentes libreoffice. Quando você confirmar que são todos que você deseja se livrar, execute o seguinte comando ... com cuidado :

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

A ideia:

  1. Faça o sistema listar todos os pacotes instalados
  2. Filtre para mostrar apenas os que correspondem libreoffice
  3. Filtre para mostrar apenas a coluna com o nome do pacote
  4. Execute o comando purge em cada um desses pacotes

1
talvez você poderia sugerir a adição da -popção para que xargspedirá confirmação antes de executar cada comando construído, ou antes verificar com echoem vez desudo apt-get purge
Zanna

1
@ Zanna -pajudaria, mas não seria um comando único. Usei ecos para testar o que estava recebendo antes de executar o comando, por isso vale a pena recomendar.
aalaap

2
Posso dar-lhe um agora você tornou mais seguro :)
Zanna

Eu acho que -n1é bom para o echomas você tem que removê-lo da purga; caso contrário, a ordem de dependência (a depende de b, tenta excluir b primeiro) pode interromper a limpeza.
Aaron Digulla 9/11/2016

Sua solução é a melhor que encontrei até agora, obrigado.
João Pedro

5

O Aptitude tem suporte para padrões globais e outras partidas bem legais como esta:

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

Isso irá corresponder a qualquer pacote que tem em si próprio nome libreofficee 3.6e também está instalado (que é o que o ~irepresenta.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.