使用“apt-get remove”时忽略当前未安装的包

jav*_*ard 18 debian deb ubuntu apt-get apt

我有一个场景,我想删除一组可能已安装或可能未安装的软件包,我希望 apt-get 删除那些并默默忽略那些没有安装的软件包。就像是:

apt-get remove foo bar baz
Run Code Online (Sandbox Code Playgroud)

如果 foo 和 bar 已安装但 baz 未安装,则会删除 foo 和 bar 而不会抱怨 baz。有没有办法做到这一点?

我尝试过但没有奏效的事情,将 cups-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
Run Code Online (Sandbox Code Playgroud)

我知道我可以用 shell 脚本和一些dpkg --list魔法来做到这一点,但我想避免任何不是绝对必要的复杂性。

小智 10

是否可以选择使用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 ...
Run Code Online (Sandbox Code Playgroud)

要删除包配置文件,请使用 purge 如下

dpkg --purge foo bar libperl-dev
Run Code Online (Sandbox Code Playgroud)

  • 我应该提到要删除的包可能具有反向依赖关系,我也希望删除这些包。因此,Apt-get 比 dpkg 好得多,但我会接受你的回答,因为似乎没有更好的方法来做到这一点。 (2认同)

小智 8

我将apt-get remove --purge(aka 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
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

12983 次

最近记录:

6 年,2 月 前