rm को grep आउटपुट दे रहा है


47

मैं करने के लिए grepउत्पादन पाइप करने की कोशिश कर रहा हूँ rm, लेकिन यह बेकार सामान outputs। क्या किसी स्विच की आवश्यकता है rm? या rmसीधे एक regexp प्रदान किया जा सकता है?

ls | grep '^\[Daruchini'| rm

rm: लापता ऑपरेंड अधिक जानकारी के लिए `rm --help 'आज़माएं।


हमेशा त्रुटि संदेश कॉपी-पेस्ट करें। (मैंने भविष्य के पाठकों के लाभ के लिए वास्तविक त्रुटि संदेश सम्मिलित किया है। लेकिन मैं ऐसा केवल इसलिए कर सका क्योंकि इस मामले में केवल एक ही त्रुटि संदेश है। अधिकांश समय, समस्या को समझने के लिए सटीक त्रुटि संदेश का होना महत्वपूर्ण है। । हमेशा सभी त्रुटि संदेशों को पूर्ण रूप से कॉपी-पेस्ट करें।)
गिल्स एसओ- बुराई को रोकें '

जवाबों:


57

आपको xargsमानक इनपुट को तर्कों में बदलने के लिए उपयोग करने की आवश्यकता है rm

$ ls | grep '^Dar' | xargs rm

(फिल्नाम में विशेष वर्णों से सावधान रहें; GNU grep के साथ, आप पसंद कर सकते हैं

$ ls | grep -Z '^Dar' | xargs -0 rm

)

इसके अलावा, जब शेल regexps का उपयोग नहीं करता है, तो यह एक सरल पैटर्न है:

$ rm Dar*

(इस बीच, मुझे लगता है कि मुझे अधिक नींद की आवश्यकता है।)


2
यह मानते हुए कि जब उसने सवाल पोस्ट किया था, तब उसने गलती rm Dar*नहीं की थी rm !(Dar*)
गिल्स एसओ- बुराई को रोकना '

... ठीक है, हां, मैं zsh ^मोड में फंस गया था ( basg !चीज के समान )।
गीकॉर्पोस

1
+1 महान उत्तर, मुझे बिट | tr "\n" "\0"से पहले जोड़ना था xargs। इस पोस्ट में देखा गया: stackoverflow.com/questions/20307299/…
एडम प्लोचर

5

के आउटपुट को पार्स न करेंls

यहां, शेल को अपनी इच्छित फ़ाइलों को फ़िल्टर करने के लिए प्राप्त करना बहुत सरल है। ध्यान दें कि यह वह शेल है जो पैटर्न का विस्तार कर रहा है Dar*, rmकमांड का नहीं । शेल द्वारा किए गए पैटर्न विस्तार को ग्लोबिंग कहा जाता है ।

rm Dar*

अधिक जटिल मामलों में, findकमांड को देखें।


3

यदि आप grepव्हॉट्सएप के बजाय नईलाइनों के आउटपुट का परिसीमन करना चाहते हैं , तो आप विकल्प के xargsमाध्यम से इसे निर्दिष्ट कर सकते हैं -d

$ ls | grep '^Dar' | xargs -d '\n' rm

(जैसा कि इस प्रश्न में वर्णित है )


2

तर्क के रूप में आउटपुट पास करने के लिए, मैं थोड़ी देर के लूप का उपयोग करता हूं क्योंकि मैं xargs से परिचित नहीं हूं।

ls | grep '^Dar' | while read line; do rm "$line";done;

यह केवल एक ही है जिसने मेरे मामले में काम किया है।
marbel

0

मेरे लिए सबसे अच्छा आदेश है:

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