我正在尝试删除一堆包含“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
Run Code Online (Sandbox Code Playgroud)
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。
只需在要保留的包名称前加上-。您需要--在包列表之前添加以确保包的名称不被视为选项:
yum remove *php* -- -php-common
Run Code Online (Sandbox Code Playgroud)
从手册页(在安装选项下):
如果名称以 - 字符开头,则在事务中进行搜索并删除所有匹配项。
--exclude 将从存储库中排除一个包,因为它无法安装,但它不会对已安装的包起作用。
真正保护您的软件包免遭卸载的一种方法是将其名称放入protected_packagesin 中/etc/yum.conf,但随后yum不会处理与该软件包匹配的通配符。
一种解决方案:
对于您的具体示例php-common,这不会真正起作用,因为依赖项解析器会干扰,但如果依赖项不是问题,您可以尝试以下操作:
yum erase `yum list installed | cut -d " " -f 1 | grep php | grep -v php-common `
Run Code Online (Sandbox Code Playgroud)
该子命令将生成已安装包的列表,将其剪切到第一列,将其缩减php为名称中包含的包,然后php-common从列表中删除。