我有一个 github 操作,其中包含释放空间的步骤,它有一个 apt purge 命令,后面跟着数百个包。但如果其中一个包不可用,则所有进程都会失败
如果您想要一次清除或删除大量软件包,如何强制清除现有已安装的软件包?
例子:
sudo apt purge pack1 pack2 pack3 -y
如果 pack1 和 pack2 存在,但 pack3 不存在,则进程失败
E: Unable to locate package 'pack3'
并且 pack1 和 pack2 不会被清除。
即使剩余的一个不存在,如何强制删除 pack1 和 pack2?
说到重点
不用说:
无论出于何种原因,一次清除数百个已安装的软件包都是一个坏主意。
使用 APT 的选项
-y
自动回答“是”是一个更糟糕的主意。你可能知道这一点,但我必须注意到这一点......关于你的问题:
AFAIK APT 无法做到这一点...APT 所做的不仅仅是尝试安装、删除、清除...等基本操作...它解决依赖关系,避免并警告冲突,替换一些已删除的软件包.. . 等等... 因此,在开始对所有传递的包执行任何用户指定的操作之前,它必须根据其缓存的可用包数据库解析/检查所有传递的包。
因此,在这种情况下,最好的选择是一次将这些包传递给 APT,
xargs
如下所示:或使用 shell 循环,例如:
或类似的解决方案。
另一方面,如果使用 APT 对您来说不是必须的,那么
dpkg
应该在不退出此类包“”的情况下完成这项工作Unable to locate packages
,并且可以像这样使用:围绕点
示范:
请注意提交操作之前的三个步骤
purge
:这些是不言自明的,尽管
golang
未安装该软件包:但是,APT 可以在其缓存的包列表中找到它,从而可以对其做出决定:
和:
这是正常现象,APT 将继续删除已安装的软件包
但如果 APT 无法在其缓存的包列表中找到某个包:
APT 无法做出决定,因此在打印错误后退出:
重要的提醒:
如上面的演示所示,APT 检查通过操作获得的缓存包列表
update
,因此,最新的包列表对于 APT 的正确功能至关重要,并且使用过时的包列表执行purge
/remove
甚至install
操作可能会导致在意外结果中删除了非预期的软件包...请参阅例如apt-get install 意外删除了 Firefox ...因此,请通过运行以下命令来确保软件包列表是最新的:第一的。
apt purge
如果您指定的任何包不存在,该命令将失败。这是因为apt purge
删除了与包关联的所有文件,包括配置文件。如果包不存在,则没有要删除的文件,因此apt purge
命令失败。要强制清除现有已安装的软件包,即使其中一个软件包不存在,您也可以使用该
--force-remove
选项。例如,以下命令将清除软件包pack1
、pack2
和pack3
,即使它们pack3
不存在:该
--force-remove
选项指示apt purge
忽略当尝试删除不存在的包时发生的任何错误。这意味着apt purge
即使您指定的包之一不存在,该命令仍然会成功。以下是该命令的详细说明:
sudo
- 这告诉命令以 root 身份运行。apt purge
- 这是清除包的命令。--force-remove
- 此选项指示apt purge
忽略当尝试删除不存在的包时发生的任何错误。pack1
pack2
pack3
- 这些是您要清除的包。如果您在尝试一次 apt purge 或删除多个软件包时遇到由于缺少软件包而导致整个过程失败的问题,有一种方法可以确保删除现有已安装的软件包,而不会因缺少软件包而受到阻碍。单包。
要实现此目的,您可以使用名为“apt-get --ignore-missing”的 bash 命令。即使未找到某些包,此命令也允许您继续删除过程。
以下是如何修改 GitHub 操作步骤以包含此命令的示例:
通过使用“--ignore-missing”标志,apt-get 将忽略它找不到的任何包并继续清除剩余的包。这确保了即使未找到 pack3,pack1 和 pack2(如果存在)仍将被清除。
这样,您就可以放心地清除现有已安装的软件包,而不会因缺少单个软件包而导致进程失败。
希望这个解决方案可以帮助您在 GitHub 操作中达到预期的结果!