Esto ya se respondió bien, pero encontré una situación en la que no quería "marcar" muchos de los paquetes (y luego desmarcarlos después autoremove
).
Cuando la lista de paquetes que desee está definida fácilmente a autoremove, a continuación, se puede canalizar / sed
/ xargs
hacia fuera.
No tengo un ejemplo complejo de muchos paquetes, pero si tengo el siguiente escenario:
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.
y quiero eliminar solo los linux*
paquetes, puedo hacer esto:
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
Entonces, desde aquí, es fácil pasarlos xargs
como argumentos de línea de comandos a lo simple apt-get remove -y
:
apt-get autoremove -s \
| sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
| xargs apt-get remove -y
Normalmente cuando lo uso xargs
, me protegería de los espacios en los argumentos (por ejemplo, find ... -print0 | xargs -0 ...
), pero como los nombres de los paquetes no tienen espacios en ellos, me siento cómodo usando argumentos delimitados por una nueva línea.
(Creo que en otras situaciones, sería más apropiado "marcar" una retención, deshacer los paquetes. Eso también se puede hacer con expresiones regulares y xargs
, pero es probable que exagere la situación).