Назад | Перейти на главную страницу

yum remove * wildcard *, кроме некоторых пакетов, которые также соответствуют шаблону?

Я пытаюсь удалить кучу пакетов, в которых есть «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* и --exclude=php-common.x86_64 0:5.4.16-36.el7_1 тоже не работает.

Я спрашиваю об этом, потому что у меня есть огромный пакет (~ 1,5 ГБ), который мне все еще нужен, и я не хочу его повторно загружать, потому что у меня медленный интернет.

ОС: CentOS 7.

Просто добавьте префикс к имени пакета, который вы хотите сохранить -. Вам нужно добавить -- перед списком пакетов, чтобы гарантировать, что имя пакета не рассматривается как опция:

yum remove *php* -- -php-common 

На странице руководства (в разделе установки):

Если имя начинается с символа -, то поиск выполняется внутри транзакции, и все совпадения удаляются.

--exclude исключит пакет из репозиториев, так как он не доступен для установки, но не действует на установленные пакеты.

Один способ действительно защитить свой пакет от деинсталляции - поместить его имя в protected_packages в /etc/yum.conf, но потом yum не будет обрабатывать подстановочный знак, который также соответствует этому пакету.

Одно решение:

С вашим конкретным примером php-common, на самом деле это не сработает, поскольку преобразователь зависимостей будет мешать, но если зависимости не являются проблемой, вы можете попробовать следующее:

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

Подкоманда сгенерирует список установленных пакетов, сократит его до первого столбца, сократит его до пакетов, содержащих php в названии, а затем устраняет php-common из списка.

╮ (╯_╰) ╭
Вчера я написал питон для решения этой проблемы.
Надеюсь, это будет полезно для вас и кого волновала эта проблема. : -)

Я записал процесс разработки в своем блоге
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]: 

ссылка на скачивание