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

26

Я хочу удалить 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тоже

Аарон Дигулла
источник
Вы пытаетесь узнать ответ об определенном шаблоне или довольны удалением компонентов LibreOffice?
Анвар
1
Возможный дубликат Как удалить LibreOffice? Ответ вероятный: это работает только для 3,6, а вы не используете 3,6 :-)
Rinzwind
Я использую libreoffice в качестве примера, потому что он содержит так много частей. Но у меня была такая же проблема с ядром (очистка старых версий)
Аарон Дигулла

Ответы:

26
  1. Используйте apt-get, а не aptitudeи используйте регулярные выражения.

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

  3. Обведите регулярное выражение одинарными кавычками, чтобы избежать интерпретации звездочкой оболочки. (Если у вас есть файл с именем libreoffice.example, например , в текущем каталоге, то оболочка будет заменить libreoffice.*с libreoffice.example, так что вы должны использовать одиночные кавычки , чтобы остановить это поведение.)

Результат:

sudo apt-get remove 'libreoffice.*'
Флимм
источник
Спасибо, это работает. Интересно, что он также работает с шаблоном libreoffice*(то есть шаблонами стиля глобуса), который немного смущает меня, потому что ни один из них не должен работать :-)
Аарон Дигулла,
3
Для тех, кто хочет проверить это, используйте опцию, --dry-runчтобы увидеть, что будет удалено без каких-либо изменений в системе.
Аарон Дигулла
@AaronDigulla Еще не знал о --dry-run. Это пригодится! Благодарность!
Glutanimate
apt-get также плохо обрабатывает регулярные выражения, сравните оба решения в этом ответе .
Брайам
Чтобы было понятно, aptиспользуются регулярные выражения POSIX. From man apt-get(Debian Jessie): "Если ни один пакет не соответствует данному выражению, и выражение содержит один из '.', '?' или '*' тогда предполагается, что это регулярное выражение POSIX ... "
x-
6

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

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. Запустите команду очистки на каждом из этих пакетов
aalaap
источник
1
возможно, вы могли бы предложить добавить эту -pопцию, которая xargsбудет запрашивать подтверждение перед выполнением каждой построенной команды, или сначала проверять echoвместоsudo apt-get purge
Zanna
1
@ Занна -pбы помогла, но это была бы не однократная команда. Я использовал echos для проверки того, что я получал перед запуском команды, так что это стоит рекомендовать.
Aalaap
2
Я могу дать тебе +1, теперь ты сделал это безопаснее :)
Zanna
Я думаю, что -n1это хорошо для, echoно вы должны удалить его из чистки; в противном случае порядок зависимостей (a зависит от b, сначала пытается удалить b) может нарушить очистку.
Аарон Дигулла
Ваше решение - лучшее, что я нашел до сих пор, спасибо.
Жоао Педро
5

В Aptitude есть поддержка глобальных шаблонов, и еще одно довольно классное совпадение:

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

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

Braiam
источник