Isso já foi respondido bem, mas eu encontrei uma situação em que não queria "marcar" muitos dos pacotes (e desmarcar depois autoremove
).
Quando a lista de pacotes que você deseja remover automaticamente é facilmente definida, você pode canalizar / sed
/ xargs
eles.
Não tenho um exemplo complexo de muitos pacotes, mas se tiver o seguinte cenário:
root@fptc-rsvrd:~# apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
libluajit-5.1-2 libluajit-5.1-common linux-headers-4.4.0-141 linux-headers-4.4.0-141-generic linux-headers-4.4.0-143 linux-headers-4.4.0-143-generic linux-headers-4.4.0-146 linux-headers-4.4.0-146-generic
linux-image-4.4.0-141-generic linux-image-4.4.0-143-generic linux-image-4.4.0-146-generic linux-image-extra-4.4.0-141-generic linux-modules-4.4.0-143-generic linux-modules-4.4.0-146-generic
linux-modules-extra-4.4.0-143-generic linux-modules-extra-4.4.0-146-generic linux-signed-image-4.4.0-141-generic pandoc-data
0 upgraded, 0 newly installed, 18 to remove and 19 not upgraded.
After this operation, 907 MB disk space will be freed.
e quero remover apenas os linux*
pacotes, posso fazer isso:
root@fptc-rsvrd:~# apt-get autoremove -s | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp'
linux-headers-4.4.0-141-generic
linux-headers-4.4.0-141
linux-headers-4.4.0-143-generic
linux-headers-4.4.0-143
linux-headers-4.4.0-146-generic
linux-headers-4.4.0-146
linux-signed-image-4.4.0-141-generic
linux-image-extra-4.4.0-141-generic
linux-image-4.4.0-141-generic
linux-modules-extra-4.4.0-143-generic
linux-image-4.4.0-143-generic
linux-modules-extra-4.4.0-146-generic
linux-image-4.4.0-146-generic
linux-modules-4.4.0-143-generic
linux-modules-4.4.0-146-generic
Portanto, a partir daqui, é fácil passar esses xargs
argumentos como argumentos de linha de comando para o simples apt-get remove -y
:
apt-get autoremove -s \
| sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
| xargs apt-get remove -y
Normalmente, ao usar xargs
, eu me protegia contra espaços nos argumentos (por exemplo, find ... -print0 | xargs -0 ...
), mas como os nomes dos pacotes não têm espaços, eu me sinto à vontade usando argumentos delimitados por nova linha.
(Eu acho que em outras situações, seria mais apropriado "marcar" uma retenção, desatrelar os pacotes. Isso também pode ser feito com expressões regulares e xargs
, mas provavelmente está sobrecarregando a situação.)