Debian

如何使用 apt 選擇不完整的軟體包範圍?

  • August 2, 2017

是否有一種簡單的方法可以選擇一系列軟體包(尤其是核心相關的軟體包)以使用 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-getwith xargs,您首先必須確保它不會問任何問題,例如:

export DEBIAN_FRONTEND=noninteractive
dlocate -k | grep -- -4.4.0- | xargs apt-get remove -y

注意事項dlocate:該-k選項列出所有已安裝的核心和 dkms 相關軟體包,每行一個(並且-K執行相同,但dpkg -L格式為詳細)。我添加了啟用這種用法的-k選項dlocate,但直到現在我從未想到應該-kgrep.

下一個版本dlocate(即 >= 1.08)將支持dlocate -k '-4.4.0-',而無需通過grep.

引用自:https://unix.stackexchange.com/questions/383104