yum删除*通配符*除了一些包也匹配通配符?

我试图删除一堆包含'abc'的包。 但是,我不想删除'abc-def'。 我怎样才能做到这一点?

例如,如何删除每个包含“php”的包,除了“php-common”?

我尝试在命令中添加--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.x86_64 0:5.4.16-36.el7_1 --exclude=php-common*--exclude=php-common.x86_64 0:5.4.16-36.el7_1也不起作用。

我问这是因为我有一个巨大的包(〜1.5 GB),我仍然需要,不想重新下载它,因为我的networking速度很慢。

操作系统:CentOS 7。

只需在您想要保留的包名称前加上- 。 您需要在软件包列表之前添加以确保软件包的名称不被视为一个选项:

 yum remove *php* -- -php-common 

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

如果名称以一个 – 字符开始,那么在事务内部进行search,并且除去所有匹配。

--exclude将从软件仓库中排除一个软件包,因为它不可用于安装,但不会影响已安装的软件包。

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

一个解决scheme

使用你的具体例子php-common ,这将不会真的工作,因为依赖parsing器会干扰,但是如果依赖不是问题,你可以尝试以下方法:

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

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

╮(╯_╰)╭
我昨天写了一个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]: 

下载链接