मैंने उन फ़ाइलों को हटाने की कोशिश की जो A से शुरू होती हैं और 2 नंबरों के साथ समाप्त होती हैं लेकिन यह एक काम नहीं करता है।
मैंने क्या कोशिश की:
rm ^A*[0..9]2$
मैं गलत कहाँ हूँ?
मैंने उन फ़ाइलों को हटाने की कोशिश की जो A से शुरू होती हैं और 2 नंबरों के साथ समाप्त होती हैं लेकिन यह एक काम नहीं करता है।
मैंने क्या कोशिश की:
rm ^A*[0..9]2$
मैं गलत कहाँ हूँ?
जवाबों:
अपने मापदंड से मेल खाती सभी फ़ाइलों को हटाने के लिए आप निम्न आदेश का उपयोग कर सकते हैं:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
यह काम किस प्रकार करता है:
ls सभी फाइलों को सूचीबद्ध करता है (परिणाम के बाद से लाइन में एक)।
grep -P "^A.*[0-9]{2}$" फ़ाइलों की सूची को फ़िल्टर करता है और केवल उन लोगों को छोड़ देता है जो नियमित अभिव्यक्ति से मेल खाते हैं ^A.*[0-9]{2}$
.*किसी भी संख्या में होने वाली घटनाओं को इंगित करता है ., जहां .किसी भी वर्ण से मेल खाता वाइल्डकार्ड है।
[0-9]{2}[0-9]किसी भी अंक के ठीक दो होने का संकेत देता है ।
xargs -d"\n" rmrm lineहर lineउस के लिए एक बार कार्यान्वित किया जाता है जो इसे पाइप किया जाता है।
मैं गलत कहाँ हूँ?
शुरुआत के लिए, rmएक तर्क के रूप में एक नियमित अभिव्यक्ति को स्वीकार नहीं करता है। वाइल्डकार्ड के अलावा *, हर दूसरे वर्ण का इलाज शाब्दिक रूप से किया जाता है।
इसके अलावा, आपकी नियमित अभिव्यक्ति थोड़ी दूर है। उदाहरण के लिए, *के किसी भी घटनाओं का मतलब है ...एक नियमित अभिव्यक्ति में है, इसलिए A*मैचों A, AAआदि और यहां तक कि एक खाली स्ट्रिंग।
अधिक जानकारी के लिए, Regular-Expressions.info पर जाएं ।
-d"\nस्विच रिक्त स्थान समस्या ठीक हो जाती।
grep -P(पर्ल रेगेक्स) नहीं है। grep -Eइस मामले में काम कर सकते हैं।
-Iके साथ xargsऔर हमेशा पहले गैर घातक आदेशों के साथ परीक्षण:xargs -d"\n" -I {} echo "{}"
ls? इस प्रश्न को देखें जो इस लेख की ओर इशारा करता है । नुकसान की वजह से आप rmक्या करना चाहते हो सकता है।
या उपयोग कर रहा है find:
find your-directory/ -name 'A*[0-9][0-9]' -delete
यह समाधान अजीब फ़ाइल नामों से निपटेगा।
-type f
xargsसाथ दृष्टिकोण का उपयोग कर सकते हैं rm -f।
बैश मैन पेज का फ़ाइल नाम विस्तार अनुभाग देखें :
rm A*[0-9][0-9]
रेगेक्सप के साथ समाधान 200 गुना बेहतर है, यहां तक कि इसके साथ ही आप देख सकते हैं कि कमांड का उपयोग करने से पहले कौन सी फ़ाइल हटा दी जाएगी, अंतिम पाइप काट कर:
ls | grep -P "^A.*[0-9]{2}$"
यदि यह सही है तो बस उपयोग करें:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d "\n" rm
यह 200 गुना बेहतर है क्योंकि यदि आप यूनिक्स के साथ काम करते हैं तो यह जानना महत्वपूर्ण है कि ग्रीप का उपयोग कैसे किया जाए। यदि आप इसका उपयोग करना जानते हैं तो यह बहुत शक्तिशाली है।
find कमांड रीगेक्स के साथ भी काम करता है।
जांचें कि कौन सी फाइलें डिलीट होने वाली हैं
find . -regex '^A.*[0-9]{2}$'
फाइलों को नष्ट
find . -regex '^A.*[0-9]{2}$' -delete