Bagaimana cara saya menghapus semua paket yang cocok dengan pola tertentu?

26

Saya ingin menghapus libreoffice. Program ini terdiri dari sekitar tiga lusin modul. Idealnya, mereka dapat dihapus dengan:

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

tapi itu gagal dengan

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

dll.

Bagaimana cara saya menghapus satu set paket berdasarkan pola?

PS: Saya senang dengan jawaban pakai dpkgatau aptjuga

Aaron Digulla
sumber
Apakah Anda mencoba mengetahui jawaban tentang pola tertentu atau senang dengan penghapusan komponen LibreOffice?
Anwar
1
kemungkinan duplikat dari Bagaimana cara menghapus LibreOffice? Jawabannya mungkin: ini hanya bekerja untuk 3.6 dan Anda tidak menggunakan 3.6 :-)
Rinzwind
Saya menggunakan libreoffice sebagai contoh karena mengandung begitu banyak bagian. Tapi saya punya masalah yang sama dengan kernel (membersihkan versi lama)
Aaron Digulla

Jawaban:

26
  1. Gunakan apt-get, bukan aptitude, dan gunakan ekspresi reguler.

  2. Dalam ekspresi reguler, .berarti karakter apa saja, dan *berarti nol atau lebih banyak kali. Jadi ekspresi libreoffice.*cocok dengan nama paket apa pun yang berisi string libreoffice, diikuti oleh sejumlah karakter.

  3. Kelilingi ekspresi reguler dengan tanda kutip tunggal untuk menghindari shell menafsirkan tanda bintang. (Jika Anda memiliki file bernama libreoffice.examplemisalnya di direktori Anda saat ini, shell akan menggantinya libreoffice.*dengan libreoffice.example, jadi Anda harus menggunakan tanda kutip tunggal untuk menghentikan perilaku ini.)

Hasil:

sudo apt-get remove 'libreoffice.*'
Flimm
sumber
Terima kasih, ini berhasil. Cukup menarik, ini juga bekerja dengan pola libreoffice*(yaitu pola gaya glob) yang sedikit membingungkan saya karena keduanya seharusnya tidak bekerja :-)
Aaron Digulla
3
Bagi mereka yang ingin menguji ini, gunakan opsi --dry-rununtuk melihat apa yang akan dihapus tanpa ada perubahan pada sistem.
Aaron Digulla
@AaronDigulla Belum tahu tentang --dry-run. Itu akan berguna! Terima kasih!
Glutanimate
apt-get juga cukup buruk dalam menangani ekspresi reguler, bandingkan kedua solusi dalam jawaban ini .
Braiam
Untuk memperjelasnya, aptgunakan ekspresi reguler POSIX. From man apt-get(Debian Jessie): "Jika tidak ada paket yang cocok dengan ekspresi yang diberikan dan ekspresi berisi salah satu dari '.', '?' atau '*' maka itu dianggap sebagai ekspresi reguler POSIX ... "
x-yuri
6

Alternatifnya adalah:

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

Ini akan mencantumkan semua paket yang cocok libreoffice. Ketika Anda telah mengkonfirmasi bahwa mereka semua adalah yang ingin Anda singkirkan, jalankan perintah berikut ... dengan hati-hati :

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

Ide:

  1. Dapatkan sistem untuk mencantumkan semua paket yang diinstal
  2. Filter untuk hanya menampilkan yang cocok libreoffice
  3. Filter untuk hanya menampilkan kolom dengan nama paket
  4. Jalankan perintah purge pada masing-masing paket tersebut
aalaap
sumber
1
mungkin Anda bisa menyarankan menambahkan -popsi sehingga xargsakan meminta konfirmasi sebelum mengeksekusi setiap perintah yang dibangun, atau pertama memeriksa dengan echobukannyasudo apt-get purge
Zanna
1
@Zanna -pakan membantu, tetapi itu tidak akan menjadi perintah sekali pakai . Saya memang menggunakan gema untuk menguji apa yang saya dapatkan sebelum menjalankan perintah, jadi itu layak untuk direkomendasikan.
aalaap
2
Saya dapat memberi Anda +1 sekarang Anda membuatnya lebih aman :)
Zanna
Saya pikir -n1itu bagus untuk echotetapi Anda harus menghapusnya dari pembersihan; jika tidak, urutan dependensi (a tergantung pada b, mencoba menghapus b terlebih dahulu) mungkin mematahkan pembersihan.
Aaron Digulla
Solusi Anda adalah yang terbaik yang saya temukan sampai sekarang, terima kasih.
João Pedro
5

Aptitude memiliki dukungan untuk pola global, dan pertandingan keren lainnya seperti ini:

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

Ini akan cocok dengan paket apa pun yang memiliki nama itu libreofficedan 3.6dan juga itu diinstal (itulah ~isingkatannya.

Braiam
sumber