这已经被很好地回答了,但是我发现我不想对许多软件包进行“标记”(然后在之后取消标记autoremove
)。
当你的包的列表要来的autoremove容易定义的,那么你可以管/ sed
/ xargs
出来。
我没有很多软件包的复杂示例,但是如果我遇到以下情况:
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.
并且我只想删除linux*
软件包,我可以这样做:
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
因此从这里开始,很容易将这些xargs
作为命令行参数传递给simple apt-get remove -y
:
apt-get autoremove -s \
| sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
| xargs apt-get remove -y
通常,在使用时xargs
,我会避免在参数中使用空格(例如find ... -print0 | xargs -0 ...
),但是由于包名称中没有空格,因此我很乐意使用以换行符分隔的参数。
(我认为在其他情况下,更合适的做法是“标记”保留,解除保留软件包。这也可以通过regexes和来完成xargs
,但可能会过度设计这种情况。)