Як видалити всі пакунки, які відповідають певному шаблону?


26

Я хочу видалити лібріофіс. Ця програма складається з приблизно трьох десятків модулів. В ідеалі їх можна видалити за допомогою:

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 як приклад, оскільки він містить так багато частин. Але у мене була така ж проблема з ядром (очищення старих версій)
Aaron Digulla

Відповіді:


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. Від man apt-get(Дебіан Джессі): "Якщо жоден пакет не відповідає заданому виразу, а вираз містить одне з". ","? " або "*", тоді передбачається, що це регулярний вираз POSIX ... "
x-yuri

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. Запустіть команду очищення на кожному з цих пакетів

1
можливо, ви можете запропонувати додати -pпараметр так, що вам xargsбуде запропоновано підтвердити перед виконанням кожної побудованої команди або спочатку перевірити echoзамістьsudo apt-get purge
Zanna

1
@Zanna -pдопомогла б, але це не була б команда з одного удару. Я використовував луни, щоб перевірити те, що я отримував перед виконанням команди, тому це варто рекомендувати.
аалаап

2
Я можу дати вам +1 зараз, коли ви зробили це безпечніше :)
Zanna

Я думаю, що -n1це добре, echoале ви повинні вийняти його з очищення; в іншому випадку порядок залежності (залежно від b, намагається спочатку видалити b) може порушити очищення.
Аарон Дігулла

Ваше рішення - найкраще, що я знайшов досі, дякую.
Жоао Педро

5

Aptitude має підтримку глобальних моделей, і ще один досить класний збіг, як цей:

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

Це буде відповідати будь-який пакет , який має в його імені libreofficeі , 3.6а також він встановлений (це те , що ~iварто.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.