ฉันจะลบแพ็คเกจทั้งหมดที่ตรงกับรูปแบบที่แน่นอนได้อย่างไร


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 หรือไม่?
Anwar

1
เป็นไปได้ที่ซ้ำกันของวิธีถอนการติดตั้ง LibreOffice? คำตอบคือ probabaly: ใช้ได้เฉพาะกับ 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*(เช่นรูปแบบสไตล์ glob) ซึ่งทำให้ฉันสับสนเล็กน้อยเพราะทั้งสองอย่างไม่ควรทำงาน :-)
Aaron Digulla

3
สำหรับผู้ที่ต้องการทดสอบสิ่งนี้ให้ใช้ตัวเลือก--dry-runเพื่อดูสิ่งที่จะถูกลบโดยไม่มีการเปลี่ยนแปลงใด ๆ กับระบบ
Aaron Digulla

@AaronDigulla ยังไม่ทราบเกี่ยวกับ ที่จะมามีประโยชน์! ขอบคุณ!
Glutanimate

apt-get เป็นการจัดการนิพจน์ปกติที่ไม่ดีพอสมควรเปรียบเทียบทั้งสองวิธีในคำตอบนี้
Braiam

เพื่อให้ชัดเจนaptใช้นิพจน์ปกติ POSIX จากman apt-get(Debian Jessie): "หากไม่มีแพ็คเกจที่ตรงกับนิพจน์ที่กำหนดและนิพจน์มีหนึ่งใน '.', '?' หรือ '*' จากนั้นจะถือว่าเป็นนิพจน์ปกติ 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. รันคำสั่ง purge บนแต่ละแพ็กเกจเหล่านั้น

1
บางทีคุณอาจแนะนำให้เพิ่ม-pตัวเลือกเพื่อให้xargsพร้อมท์เพื่อยืนยันก่อนดำเนินการแต่ละคำสั่งที่สร้างขึ้นหรือตรวจสอบครั้งแรกechoแทนsudo apt-get purge
Zanna

1
@ Zanna -pช่วยได้ แต่มันจะไม่ใช่คำสั่ง one-shot ฉันใช้ echos เพื่อทดสอบสิ่งที่ฉันได้รับก่อนรันคำสั่งดังนั้นจึงคุ้มค่าที่จะแนะนำ
aalaap

2
ฉันจะให้คุณ +1 ตอนนี้คุณทำให้มันปลอดภัยมากขึ้น :)
Zanna

ฉันคิดว่า-n1เป็นสิ่งที่ดีสำหรับechoแต่คุณต้องลบมันออกจากการกำจัด; มิฉะนั้นลำดับการพึ่งพา (a ขึ้นอยู่กับ b พยายามลบ b ก่อน) อาจทำให้การล้างไม่สำเร็จ
Aaron Digulla

ทางออกของคุณดีที่สุดที่ฉันพบมาจนถึงตอนนี้ขอบคุณ
João Pedro

5

Aptitude รองรับการใช้งานลวดลายทั่วโลกและอีกหนึ่งแมทช์ที่ยอดเยี่ยมเช่นนี้

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

สิ่งนี้จะตรงกับแพ็คเกจใด ๆ ที่มีชื่ออยู่libreofficeและ3.6ติดตั้งไว้ด้วย (นั่นคือที่~iหมายถึง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.