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

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

Quero desinstalar o libreoffice. Este programa consiste em cerca de três dezenas de módulos. Idealmente, eles poderiam 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 excluo um conjunto de pacotes por padrão?

PS: Estou feliz com as respostas com uso dpkgou apttambém

Responder1

  1. Use apt-getou apt, (não aptitude) e use expressões regulares ancoradas.

  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 string libreoffice, seguida por qualquer número de caracteres. Você deve ancorar a expressão regular com ^(para corresponder ao início da string) ou $(para corresponder ao final da string) ou ambos, caso contrário, a expressão regular não será reconhecida pelo APT.

  3. Coloque a expressão regular entre aspas simples para evitar que o shell interprete o asterisco.

Exemplo:

Para remover todos os pacotes com um nome que comece com libreoffice, execute:

sudo apt remove '^libreoffice.*$'

Responder2

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 eles 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 com que o sistema liste todos os pacotes instalados
  2. Filtre para mostrar apenas os que correspondemlibreoffice
  3. Filtre para mostrar apenas a coluna com o nome do pacote
  4. Execute o comando purge em cada um desses pacotes

Responder3

Aptitude tem suporte para padrões globais, e outras combinações bem legais como esta:

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

Isso corresponderá a qualquer pacote que tenha em seu nome libreofficee 3.6também esteja instalado (é isso que ~isignifica.

Responder4

Quando você precisa remover muitos arquivos com o mesmo prefixo, acho a expansão de chaves muito ú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}

Usei este comando para remover todos os pacotes de idiomas que nunca uso. Sim, com uma regex você pode saber qual manter e excluir as outras. De qualquer forma, gosto disso porque é fácil de lembrar e também funciona com muitos comandos bash.

informação relacionada