नियमित अभिव्यक्तियों के साथ कमांड लाइन पर फाइलें कैसे हटाएं?


18

कहते हैं कि मेरे पास FOOXX नाम की 20 फाइलें हैं, जहां XX फाइल की संख्या है, जैसे 01, 02 आदि।

फिलहाल, अगर मैं संख्या 10 से कम सभी फ़ाइलों को हटाना चाहता हूं, तो यह आसान है और मैं सिर्फ एक वाइल्डकार्ड का उपयोग करता हूं, जैसे rm FOO0 *

हालाँकि, यदि मैं 13-15, जैसे कि विशिष्ट फ़ाइलों को हटाना चाहता हूँ, तो यह और कठिन हो जाता है।

rm FPP [13-15] काम नहीं करता है, और मुझसे पूछता है कि क्या मैं सभी फाइलों को हटाना चाहता हूं। इसी तरह rm FOO1 [3-5] FOO1 से शुरू होने वाली सभी फाइलों को हटाना चाहता है

तो, इस तरह की फ़ाइलों की श्रेणियों को हटाने का सबसे अच्छा तरीका क्या है?

मैंने बैश और zsh दोनों के साथ कोशिश की है, और मुझे नहीं लगता कि वे इस तरह के मूल कार्य के लिए बहुत अलग हैं?


"... rm FOO1 [3-5] FOO1 से शुरू होने वाली सभी फ़ाइलों को हटाना चाहता है" इसका कोई मतलब नहीं है, और निश्चित रूप से यहाँ मामला नहीं है।
इग्नासियो वाज़क्वेज़-अब्राम्स

@ इग्नाशियो हाँ- मैं यह देखना चाहता हूँ कि चरित्र सेट में उस टकराव क्रम है!
किमी

जवाबों:


31

बाश में आप उपयोग कर सकते हैं:

rm FOO1 {3..5}

या

rm FOO1 {3,4,5}

FOO13, FOO14 और FOO15 को हटाने के लिए।

बैश विस्तारक ब्रेस को यहां प्रलेखित किया गया है



क्या यह भी ZSH के लिए सच है?
जैक


@ जैक: bashकमांड zशेल कमांड्स का सबसेट बनाते हैं ।
अभिनवकुलकर्णी १४'१३

इसलिए मुझे रेगेक्स और ग्लोबिंग सिंटैक्स दोनों सीखने की जरूरत है । Boohoo। :)
आदित्य सांसद

13

भविष्य के पाठकों के लिए, findकमांड फ़ाइलों को भी हटा सकती है। मैं इसी तरह की समस्या के लिए इस पर बस गया:

find . -type f -regex '...' -delete

लेकिन चुना गया उत्तर इस प्रश्न का सबसे सरल उत्तर है।


चुना हुआ उत्तर केवल उन फ़ाइलों के लिए अच्छा है जो एक नामकरण सम्मेलन का अनुसरण करते हैं। आपके उत्तर के लिए धन्यवाद, मैं एक निर्देशिका में सभी ऑब्जेक्ट फ़ाइलों को हटा सकता हूं। (मेरे मामले में मैं बस चला गया find . -name "*.o" -deleteऔर यह एक आकर्षण की तरह काम किया)
जॉन हैमिल्टन

6

ls | grep regex | xargs rm


6
आपको इसके लिए उपयोग करना चाहिए find -regex ... -print0 | xargs -0 ..., अन्यथा यह रिक्त स्थान वाले फ़ाइलनाम के लिए विफल हो जाता है।
अगली सूचना तक रोक दिया गया।

1
बेशक, यदि आप उपयोग करने जा रहे हैं findतो आप बस उपयोग कर सकते हैं -exec
इग्नासियो वाज़केज़-अब्राम्स

मेरे मामले में फ़ाइलों में स्थान थे, और परिसीमन बदलने से रिक्त स्थान की समस्या ठीक हो जाती है: ls | grep regex | xargs --delimiter = '\ n' rm
Anake


@evilsoup, +1 को उस चेतावनी को जोड़ने के लिए, लेकिन, जो एक फ़ाइल नाम में एक नई पंक्ति सम्मिलित करता है?
इयूलियन ओनोफ्रेई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.