題 使用“apt-get remove”時忽略當前未安裝的軟件包


我有一個場景,我想刪除一組可能安裝或可能沒有安裝的軟件包,我希望apt-get刪除那些那些並且默默地忽略那些不包含的軟件包。就像是:

apt-get remove foo bar baz

如果foo和bar已經安裝但是baz沒有安裝,那麼就會刪除foo和bar而不會抱怨baz。有沒有辦法做到這一點?

我試過的事情沒有用,有了cup-dbg作為我的替罪羊實際安裝的軟件包要刪除:

jcp@a-boyd:~$ sudo apt-get remove -y cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

jcp@a-boyd:~$ sudo apt-get remove --ignore-missing cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

jcp@a-boyd:~$ sudo apt-get remove --fix-broken cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

我知道我可以用shell腳本和一些來做這件事 dpkg --list 魔術,但我想避免任何並非絕對必要的複雜性。


11
2017-12-11 20:03


起源




答案:


正在回歸到諸如此類的低級工具 的dpkg 一個選項?

dpkg --remove foo bar libperl-dev
dpkg: warning: ignoring request to remove foo which isn't installed
dpkg: warning: ignoring request to remove bar which isn't installed
(Reading database ... 169132 files and directories currently installed.)
Removing libperl-dev ...

要刪除包配置文件,請使用如下所示的清除

dpkg --purge foo bar libperl-dev

6
2017-12-13 15:03



我應該提到要刪除的包可以有反向依賴,我也希望刪除它們。因此,Apt-get比dpkg要好得多,但我會接受你的答案,因為似乎沒有更好的方法來做到這一點。 - javawizard


我用 apt-get remove --purge (又名 apt-get purge)對於包含列表的依賴項。要處理不存在的軟件包,我會過濾掉未使用以下腳本安裝的軟件包。

pkgToRemoveListFull="cups-dbg bogus-package"
pkgToRemoveList=""
for pkgToRemove in $(echo $pkgToRemoveListFull); do
  $(dpkg --status $pkgToRemove &> /dev/null)
  if [[ $? -eq 0 ]]; then
    pkgToRemoveList="$pkgToRemoveList $pkgToRemove"
  fi
done
apt-get --yes --purge remove $pkgToRemoveList

6
2018-03-05 17:58





只是用 aptitude 代替 apt-get

sudo aptitude remove -y cups-dbg bogus-package

能力打印警告,但仍繼續刪除您的包:

Couldn't find any package whose name or description matched "bogus-package"
...
Removing cups-dbg ...
...

如果要清除(刪除包配置文件)而不是刪除(保留配置文件),請注意 aptitude 僅清除直接給定的包,而僅刪除未使用的依賴項。但是,您可以在第二步中清除所有已刪除的包:

apt-get -y purge $(dpkg -l | grep ^rc | awk '{print $2}')

3
2018-05-15 16:26



好。有時, bogus-package 只是有錯的名字。所以,如果我們有500個包,那麼最好還要分析偽造的包並做一些技巧(例如,數字缺少名稱等等。所以,請你提供一些關於如何做到這一點的提示.. - nyxee
@nyxee我建議將這個問題作為一個新問題,指出你想要實現的目標。 - vog