मैंने उन फ़ाइलों को हटाने की कोशिश की जो 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" rm
rm 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