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


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.*'

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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.