Questa risposta ha già risposto bene, ma ho trovato una situazione in cui non volevo "contrassegnare" molti dei pacchetti (e poi deselezionarli dopo autoremove
).
Quando l'elenco dei pacchetti che si desidera modificare automaticamente è facilmente definibile, è possibile eseguirne il pipe / sed
/ xargs
out.
Non ho un esempio complesso di molti pacchetti, ma se ho il seguente scenario:
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 voglio rimuovere solo i linux*
pacchetti, posso fare questo:
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
Quindi da qui, è facile passare questi xargs
come argomenti della riga di comando al semplice apt-get remove -y
:
apt-get autoremove -s \
| sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
| xargs apt-get remove -y
Normalmente quando lo uso xargs
, mi proteggerei dagli spazi negli argomenti (ad esempio, find ... -print0 | xargs -0 ...
), ma poiché i nomi dei pacchetti non contengono spazi, mi sento a mio agio nell'usare argomenti delimitati da newline.
(Penserei che in altre situazioni, sarebbe più appropriato "contrassegnare" una sospensione, scartare i pacchetti. Ciò può essere fatto anche con regex e xargs
, ma è probabilmente un eccesso di ingegneria della situazione.)