Debian
如何使用 apt 選擇不完整的軟體包範圍?
是否有一種簡單的方法可以選擇一系列軟體包(尤其是核心相關的軟體包)以使用 apt(或其他工具)進行安裝或刪除?
目前,我正在嘗試使用
apt remove linux-\*-4.4.0-{40..80}-\*
.這正確選擇了我要刪除的包,但該過程立即被表單錯誤中斷
E: Couldn't find any package by glob 'linux-*-4.4.0-65-*'
。確實,沒有對應於這個正則表達式的包,但我很驚訝這會導致錯誤而不是警告。畢竟,刪除一組空包是微不足道的!
這可以使用命令替換來完成。例如:
apt-get remove $(dpkg -l 'linux-*' | awk '/-4.4.0-([4-7][0-9]|80)-/ { print $2}')
或者,
dlocate
如果您安裝了它:apt-get remove $(dlocate -k | grep -E -- '-4.4.0-([4-7][0-9]|80)-')
與涉及 的任何解決方案不同
xargs
,命令替換不會更改apt-get
的標準輸入文件描述符,因此 apt-get 可以正常接收輸入(例如對 debconf 問題的回答)。xargs
從標準輸入獲取自己的輸入,因此不應與互動式程序一起使用,即可能需要標準輸入輸入的程序。要使用
apt-get
withxargs
,您首先必須確保它不會問任何問題,例如:export DEBIAN_FRONTEND=noninteractive dlocate -k | grep -- -4.4.0- | xargs apt-get remove -y
注意事項
dlocate
:該-k
選項列出所有已安裝的核心和 dkms 相關軟體包,每行一個(並且-K
執行相同,但dpkg -L
格式為詳細)。我添加了啟用這種用法的-k
選項dlocate
,但直到現在我從未想到應該-k
在grep
.下一個版本
dlocate
(即 >= 1.08)將支持dlocate -k '-4.4.0-'
,而無需通過grep
.