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)
小智 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 次 |
| 最近记录: |