Ignora os pacotes que não estão atualmente instalados ao usar o “apt-get remove”

11

Eu tenho um cenário onde eu gostaria de remover um conjunto de pacotes que podem ou não ser instalados, e gostaria de ter o apt-get para remover aqueles que são e silenciosamente ignorar aqueles que não são. Algo como:

apt-get remove foo bar baz

que, se foo e bar fossem instalados mas baz não fosse, removeria foo e bar sem reclamar de baz. Existe uma maneira de fazer isso?

Coisas que eu tentei que não funcionaram, com cups-dbg como meu pacote realmente instalado para o bode expiatório a ser removido:

jcp@a-boyd:~$ sudo apt-get remove -y cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

jcp@a-boyd:~$ sudo apt-get remove --ignore-missing cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

jcp@a-boyd:~$ sudo apt-get remove --fix-broken cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

Sei que posso fazer isso com um script de shell e com dpkg --list magic, mas gostaria de evitar qualquer complexidade que não seja absolutamente necessária.

    
por javawizard 11.12.2012 / 21:03

3 respostas

6

Está voltando para uma ferramenta de nível inferior, como dpkg , uma opção?

dpkg --remove foo bar libperl-dev
dpkg: warning: ignoring request to remove foo which isn't installed
dpkg: warning: ignoring request to remove bar which isn't installed
(Reading database ... 169132 files and directories currently installed.)
Removing libperl-dev ...

Para remover os arquivos de configuração de pacotes, use a remoção conforme abaixo

dpkg --purge foo bar libperl-dev
    
por 13.12.2012 / 16:03
6

Eu uso apt-get remove --purge (também conhecido como apt-get purge ) para a dependência após uma lista de pacotes. Para lidar com pacotes que não existem, eu filtro os pacotes que não estão instalados com o seguinte script.

pkgToRemoveListFull="cups-dbg bogus-package"
pkgToRemoveList=""
for pkgToRemove in $(echo $pkgToRemoveListFull); do
  $(dpkg --status $pkgToRemove &> /dev/null)
  if [[ $? -eq 0 ]]; then
    pkgToRemoveList="$pkgToRemoveList $pkgToRemove"
  fi
done
apt-get --yes --purge remove $pkgToRemoveList
    
por 05.03.2014 / 18:58
3

Use apenas aptitude em vez de apt-get :

sudo aptitude remove -y cups-dbg bogus-package

O Aptitude imprime avisos, mas continua a remover seus pacotes, no entanto:

Couldn't find any package whose name or description matched "bogus-package"
...
Removing cups-dbg ...
...

Se você quiser limpar (excluir os arquivos de configuração do pacote) em vez de remover (manter arquivos de configuração), observe que aptitude apenas limpa os pacotes fornecidos diretamente, enquanto as dependências não utilizadas são removidas apenas. No entanto, você pode limpar todos os pacotes removidos em uma segunda etapa:

apt-get -y purge $(dpkg -l | grep ^rc | awk '{print $2}')
    
por 15.05.2017 / 18:26