Как удалить все пакеты, соответствующие определенному шаблону?

Как удалить все пакеты, соответствующие определенному шаблону?

Я хочу удалить libreoffice. Эта программа состоит из примерно трех десятков модулей. В идеале их можно удалить с помощью:

aptitude remove libreoffice3.6* libreoffice-debian-menus libobasis3.6-*

но это не срабатывает

Couldn't find any package whose name or description matched "libreoffice3.6*"

и т. д.

Как удалить набор пакетов по шаблону?

PS: Я тоже буду рад ответам с использованием dpkgилиapt

решение1

  1. Используйте apt-getor apt, (not aptitude) и используйте закрепленные регулярные выражения.

  2. В регулярном выражении .означает любой символ, а *означает ноль или более раз. Таким образом, выражение libreoffice.*соответствует любому имени пакета, содержащему строку libreoffice, за которой следует любое количество символов. Вы должны привязать регулярное выражение к ^(для соответствия началу строки) или $(для соответствия концу строки) или к обоим, в противном случае регулярное выражение не будет распознано APT.

  3. Заключите регулярное выражение в одинарные кавычки, чтобы оболочка не интерпретировала звездочку.

Пример:

Чтобы удалить все пакеты с именем, начинающимся с libreoffice, выполните:

sudo apt remove '^libreoffice.*$'

решение2

Альтернатива:

dpkg -l | grep libreoffice | awk '{print $2}' | xargs -n1 echo

Это выведет список всех пакетов, соответствующих libreoffice. Когда вы убедитесь, что это все те, от которых вы хотите избавиться, выполните следующую команду...с осторожностью:

dpkg -l | grep libreoffice | awk '{print $2}' | xargs -n1 sudo apt-get purge -y

Идея:

  1. Заставьте систему вывести список всех установленных пакетов
  2. Фильтр, чтобы показать только те, которые соответствуютlibreoffice
  3. Фильтр для отображения только столбца с названием пакета
  4. Запустите команду очистки для каждого из этих пакетов.

решение3

Aptitude поддерживает глобальные шаблоны и другие довольно интересные соответствия, например:

aptitude remove '?and(?name(libreoffice), name(3.6), ~i)' libreoffice-debian-menus

Это будет соответствовать любому пакету, в имени которого есть libreofficeи 3.6который также установлен (именно это и означает) ~i.

решение4

Когда вам нужно удалить много файлов с одинаковым префиксом, я нахожу очень удобным раскрытие скобок:

sudo apt remove libreoffice-l10n-{bg,ca,cs,da,de,en-za,es,fr,hu,id,ja,ko,nb,nl,pl,pt,ru,sv,th,tr,uk,vi,zh-cn,zh-tw}

Я использовал эту команду, чтобы удалить все языковые пакеты, которые я никогда не использую. Да, с помощью регулярного выражения вы можете указать, какой из них оставить, и удалить остальные. В любом случае, мне это нравится, потому что это легко запомнить, и это также работает со многими командами bash.

Связанный контент