yum 删除 *wildcard*,除了一些也与通配符匹配的包?

yum 删除 *wildcard*,除了一些也与通配符匹配的包?

我正在尝试删除一堆包含“abc”的软件包。但是,我不想删除“abc-def”。我该怎么做?

例如,如何删除除“php-common”之外的所有包含“php”的包?

我尝试添加--exclude命令,但它没有按预期工作 - “php-common”仍然在删除列表中。

# yum --exclude=php-common remove *php*
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package php-cli.x86_64 0:5.4.16-36.el7_1 will be erased
---> Package php-common.x86_64 0:5.4.16-36.el7_1 will be erased
---> Package php-fpm.x86_64 0:5.4.16-36.el7_1 will be erased
---> Package php-mcrypt.x86_64 0:5.4.16-3.el7 will be erased
---> Package php-mysqlnd.x86_64 0:5.4.16-36.el7_1 will be erased
---> Package php-pdo.x86_64 0:5.4.16-36.el7_1 will be erased
--> Finished Dependency Resolution

yum remove *php* !php-common--exclude=php-common*并且--exclude=php-common.x86_64 0:5.4.16-36.el7_1也不起作用。

我之所以问这个问题,是因为我还有一个巨大的包(~1.5 GB)需要,但又不想因为网速慢而重新下载它。

操作系统:CentOS 7。

答案1

只需在要保留的软件包名称前加上前缀 即可-。您需要--在软件包列表前添加,以确保软件包名称不会被视为选项:

yum remove *php* -- -php-common 

从手册页(在安装选项下):

如果名称以 - 字符开头,则会在交易中进行搜索并删除所有匹配项。

答案2

--exclude将从存储库中排除一个包,因为它无法安装,但它不会对已安装的包起作用。

一种方法是真的保护您的软件包免于卸载的方法是将其名称放入protected_packages/etc/yum.confyum不会处理与该软件包匹配的通配符。

一个解决方案:

对于您的具体示例php-common,这实际上不起作用,因为依赖项解析器会干扰,但如果依赖项不是问题,您可以尝试以下操作:

yum erase `yum list installed | cut -d " " -f 1  | grep php | grep -v php-common `

该子命令将生成已安装软件包的列表,将其剪切到第一列,将其缩减为包含php名称的软件包,然后php-common从列表中删除。

答案3

╮(╯_╰)╭
我昨天写了一个python来解决这个问题。
希望对你和被这个问题困扰的人有用。:-)

我在博客上记录了开发过程
http://blog.j3l11234.com/2016/11/23/yum-remove-with-exclude/

用法如下:

# ./remove.py -e *php* -x php-common
analyzing exclude packages and their dependencies ...

analyzing packages which will be removed...

Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package php-cli.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-fpm.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-gd.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-mbstring.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-mysqlnd.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-opcache.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-pdo.x86_64 0:7.0.12-2.el7.remi will be erased
---> Package php-xml.x86_64 0:7.0.12-2.el7.remi will be erased
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================
 Package            Arch         Version                  Repository                                     Size
==============================================================================================================
Removing:
 php-cli            x86_64       7.0.12-2.el7.remi        @/php-cli-7.0.12-2.el7.remi.x86_64             12 M
 php-fpm            x86_64       7.0.12-2.el7.remi        @/php-fpm-7.0.12-2.el7.remi.x86_64            4.1 M
 php-gd             x86_64       7.0.12-2.el7.remi        @/php-gd-7.0.12-2.el7.remi.x86_64             203 k
 php-mbstring       x86_64       7.0.12-2.el7.remi        @/php-mbstring-7.0.12-2.el7.remi.x86_64       2.8 M
 php-mysqlnd        x86_64       7.0.12-2.el7.remi        @/php-mysqlnd-7.0.12-2.el7.remi.x86_64        868 k
 php-opcache        x86_64       7.0.12-2.el7.remi        @/php-opcache-7.0.12-2.el7.remi.x86_64        396 k
 php-pdo            x86_64       7.0.12-2.el7.remi        @/php-pdo-7.0.12-2.el7.remi.x86_64            381 k
 php-xml            x86_64       7.0.12-2.el7.remi        @/php-xml-7.0.12-2.el7.remi.x86_64            854 k

Transaction Summary
==============================================================================================================
Remove  8 Packages

Installed size: 22 M
Is this ok [y/N]: 

下载链接

相关内容