Belirli bir düzenle eşleşen tüm paketleri nasıl silerim?


26

Libreoffice'i kaldırmak istiyorum. Bu program yaklaşık üç düzine modülden oluşmaktadır. İdeal olarak, bunlar:

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

ama bu başarısız

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

vb.

Bir paket kümesini desene göre nasıl silebilirim?

PS: Ben kullanımı ile cevapları hakkında mutluyum dpkgya aptda


Belli bir kalıp hakkındaki cevabı bilmeye mi çalışıyorsun, yoksa LibreOffice bileşenlerinin kaldırılmasından memnun musunuz?
Anwar

1
olası yinelenen kaldırma LibreOffice nasıl? Cevap probabaly: bu sadece 3.6 için çalışıyor ve 3.6 :-) kullanmıyorsunuz
Rinzwind

Örnek olarak libreoffice kullanıyorum çünkü çok fazla bölüm içeriyor. Ama çekirdekte de aynı problem vardı (eski versiyonları temizliyor)
Aaron Digulla

Yanıtlar:


26
  1. Düzenli ifadeler kullanın apt-get, aptitudekullanmayın ve kullanın.

  2. Düzenli bir ifadede, .herhangi bir karakter ve *sıfır veya daha çok kez anlamına gelir. Böylece ifade libreoffice.*, dizeyi içeren herhangi bir paket adıyla ve libreofficeardından herhangi bir sayıda karakterle eşleşir .

  3. Kabuğu yıldızın yorumlamasını önlemek için normal ifadeyi tek tırnak işaretleri ile kuşatın. (Eğer adlı bir dosya olsaydı libreoffice.examplemevcut dizinde örneğin, kabuk yerini alacak libreoffice.*olan libreoffice.examplebu davranışı durdurmak için tek tırnak kullanmak zorunda.)

Sonuç:

sudo apt-get remove 'libreoffice.*'

Teşekkürler, bu işe yarıyor. İlginçtir ki, o da desen ile çalışır libreoffice*beni biraz karıştırır hangi (yani Glob tarzı kalıplarını) Bunlardan biri olmamalı çalışma :-) çünkü
Aaron Digulla

3
Bunu test etmek isteyenler --dry-runiçin, sistemde herhangi bir değişiklik yapılmadan ne silineceğini görmek için bu seçeneği kullanın.
Aaron Digulla

@AaronDigulla --dry-run henüz bilmiyordum. Bu işe yarayacak! Teşekkürler!
Glutanimate

apt-get, normal ifadeler için de oldukça kötü, bu cevabın her ikisini de karşılaştırın .
Braiam

aptAçıklığa kavuşturmak için POSIX normal ifadelerini kullanır. Kimden man apt-get(Debian Jessie): "Belirtilen ifadeyle hiçbir paket eşleşmezse ve ifade '.', '?' İfadesinden birini içeriyorsa veya '*' öyleyse POSIX düzenli ifadesi olduğu varsayılır ... "
x-yuri

6

Bir alternatif:

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

Bu eşleşen tüm paketleri listeler libreoffice. Kurtulmak istediklerinizin hepsinin doğru olduğunu onayladığınızda, aşağıdaki komutu dikkatlice uygulayın :

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

Fikir:

  1. Sistemin kurulu tüm paketleri listelemesini sağlayın
  2. Yalnızca eşleşenleri göstermek için filtrele libreoffice
  3. Yalnızca paket adında sütunu göstermek için filtreleyin
  4. Bu paketlerin her birinde temizleme komutunu çalıştırın

1
belki ekleyerek hatırlatıyoruz -pki seçeneği xargsile kontrol önce her komut inşa yürütmeden veya önce onay isteyecektir echoyerinesudo apt-get purge
Zanna

1
@Zanna -pyardım ederdi, ama tek seferlik bir komut olmazdı. Komutu çalıştırmadan önce ne aldığımı test etmek için echos kullandım, bu yüzden tavsiye etmeye değer.
aalaap

2
Sana +1 verebilirim şimdi sen daha güvenli yaptın :)
Zanna

Ben bunun için -n1iyi olduğunu düşünüyorum echoama onu tasfiyeden çıkarmak zorundasınız; Aksi takdirde, bağımlılık sırası (a b'ye bağlı, b'yi silmeye çalışır) temizliği bozabilir.
Aaron Digulla

Çözümünüz şu ana kadar bulduğum en iyisidir, teşekkür ederim.
João Pedro

5

Yetenek, küresel kalıpları ve bunun gibi bir başka harika maçları destekliyor:

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

Bu 's adına sahip herhangi bir paket maç olacak libreofficeve 3.6hem de bunun (yüklü en neyi olduğunu ~iiçin duruyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.