मैं उन सभी पैकेजों को कैसे हटाऊं जो एक निश्चित पैटर्न से मेल खाते हैं?


26

मैं libreoffice को अनइंस्टॉल करना चाहता हूं। इस कार्यक्रम में लगभग तीन दर्जन मॉड्यूल शामिल हैं। आदर्श रूप से, उन्हें हटाया जा सकता है:

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

लेकिन वह विफल रहता है

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

आदि।

मैं पैटर्न द्वारा पैकेज का एक सेट कैसे हटाऊं?

पुनश्च: मैं उपयोग के साथ dpkgया apt, के जवाब के बारे में खुश हूं


क्या आप लिबर ऑफिस घटकों को हटाने के साथ निश्चित पैटर्न या खुश के बारे में जवाब जानने की कोशिश कर रहे हैं ?
अनवर

1
लिबरऑफिस को अनइंस्टॉल कैसे करें के संभव डुप्लिकेट ? उत्तर प्रोबायली है: यह केवल 3.6 के लिए काम करता है और आप 3.6 का उपयोग नहीं कर रहे हैं :-)
रिंजविंड

मैं उदाहरण के रूप में लिबर्रेफ़ाइस का उपयोग कर रहा हूं क्योंकि इसमें बहुत सारे भाग हैं। लेकिन मुझे कर्नेल के साथ एक ही समस्या थी (पुराने संस्करणों को साफ करना)
हारून डिगुल्ला

जवाबों:


26
  1. उपयोग करें apt-get, नहीं aptitude, और नियमित अभिव्यक्ति का उपयोग करें।

  2. एक नियमित अभिव्यक्ति में, .किसी भी वर्ण का *मतलब है , और शून्य या अधिक बार का अर्थ है। तो अभिव्यक्ति libreoffice.*स्ट्रिंग के किसी भी पैकेज नाम से मेल खाती है libreoffice, इसके बाद किसी भी वर्ण का।

  3. तारांकन की व्याख्या करने वाले शेल से बचने के लिए एकल उद्धरण के साथ नियमित अभिव्यक्ति को घेरें। (आप नाम की एक फ़ाइल था libreoffice.exampleअपने वर्तमान निर्देशिका में उदाहरण के लिए, खोल की जगह लेंगे libreoffice.*साथ libreoffice.exampleहै, तो आप एकल उद्धरण का उपयोग करने के इस व्यवहार को रोकने के लिए है।)

परिणाम:

sudo apt-get remove 'libreoffice.*'

धन्यवाद, यह काम करता है। दिलचस्प रूप से पर्याप्त है, यह पैटर्न libreoffice*(यानी ग्लोब स्टाइल पैटर्न) के साथ भी काम करता है जो मुझे थोड़ा भ्रमित करता है क्योंकि दोनों में से किसी को भी काम नहीं करना चाहिए :-)
हारून डिगुल्ला

3
जो लोग इसका परीक्षण करना चाहते हैं, वे इस विकल्प --dry-runका उपयोग करके यह देख सकते हैं कि सिस्टम में कोई बदलाव किए बिना क्या हटाया जाएगा।
आरोन दिगुल्ला

@AaronDigulla के बारे में अभी तक कोई जानकारी नहीं है। वह काम आएगा! धन्यवाद!
ग्लूटेनाएंट

apt-get बहुत खराब है नियमित अभिव्यक्ति को भी संभालना, इस उत्तर में दोनों समाधानों की तुलना करें ।
ब्रिअम

इसे स्पष्ट करने के लिए, aptPOSIX नियमित अभिव्यक्ति का उपयोग करता है। से 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लेकिन आपको इसे पर्स से निकालना होगा; अन्यथा, निर्भरता क्रम (बी पर निर्भर करता है, पहले बी को हटाने की कोशिश करता है) पर्स को तोड़ सकता है।
आरोन दिगुल्ला

आपका समाधान मुझे अब तक मिला सबसे अच्छा है, धन्यवाद।
जोहो पेड्रो

5

एप्टीट्यूड में वैश्विक पैटर्न के लिए समर्थन है, और इस तरह से एक और शानदार मैच:

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

यह किसी भी पैकेज से मेल खाएगा, जिसमें यह नाम है libreofficeऔर 3.6यह भी स्थापित है (यह वही है जिसके लिए ~iखड़ा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.