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

Aaron Digulla
fonte
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.*'
Flimm
fonte
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
aalaap
fonte
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.

Braiam
fonte