जवाबों:
अपने प्रश्न का सीधे उत्तर देने के लिए, "नहीं - आप वह नहीं कर सकते जो आप वर्णन करते हैं rm
"।
आप कर सकते हैं , हालांकि, यह आप के साथ संयोजित करना find
। यहाँ कई तरीकों में से एक है जो आप कर सकते हैं:
# search for everything in this tree, search for the file pattern, pipe to rm
find . | grep <pattern> | xargs rm
उदाहरण के लिए, यदि आप सभी * ~ फ़ाइलों को nuke करना चाहते हैं, तो आप ऐसा कर सकते हैं:
# the $ anchors the grep search to the last character on the line
find . -type f | grep '~'$ | xargs rm
एक टिप्पणी से विस्तार करने के लिए * :
# this will handle spaces of funky characters in file names
find -type f -name '*~' -print0 | xargs -0 rm
find | grep | xargs rm
। यदि रिक्त स्थान (या newlines) के साथ फ़ाइलें हैं, तो यह टूट जाएगा (और फ़ाइल नाम और जहां स्थान हैं) के आधार पर सामान को हटा सकते हैं जिसे आपने हटाने का इरादा नहीं किया था। find … -print0 | xargs -0 rm
और अधिक मजबूत होगा। हालांकि, इसका मतलब यह होगा कि आप उपयोग नहीं कर सकते हैं grep
और find
केवल वांछित फ़ाइलों के मिलान और प्रिंट करने के लिए विधेय का उपयोग करना चाहिए । वारेन का दूसरा उदाहरण अधिक मजबूत होगा find -type f -name '*~' -print0 | xargs -0 rm
।
"अन्य आदेशों का उपयोग किए बिना"
नहीं।
globstar
सेट के साथ बैश का उपयोग करना , हाँ :
rm basedir/**/my*pattern*
आपके द्वारा मेल की जाने वाली फ़ाइलों को सूचीबद्ध करने ls -1
से पहले इसे पहले उदाहरण के साथ आज़माएं rm
।
आप उदाहरण के माध्यम से विकल्प सेट करें shopt -s globstar
।
वैकल्पिक रूप से, एक छोटा find
संस्करण:
find -type f -name 'my*pattern*' -delete
या GNU के लिए find
:
find -type f -name 'my*pattern*' -exec rm {} +
या गैर-जीएनयू find
(थोड़ा धीमा) के लिए एक और विकल्प :
find -type f -name 'my*pattern*' -exec rm {} \;
भी, निर्देशिका को दूर के रूप में आप के लिए पूछने के लिए: बस परिवर्तन rm
में rm -r
ऊपर बताए गए आदेशों में और केवल पर मिलान को छोड़ -type f
में find
आदेशों।
मैंने "rm -rf" का पता लगा लिया है, जहाँ फ़ाइल नाम और मिलान पैटर्न जैसे * और? आदि (जैसे Todays_log_2009 ????। लॉग)। यह वर्तमान डिर से शुरू होगा और उस पैटर्न को हटाने वाली फ़ाइलों को पुन: हटाने का काम करेगा।
यदि आप zsh (1) का उपयोग करते हैं, तो .zshrc के साथ "विस्तारित ग्लोबिंग " चालू करें setopt extendedglob
। '** /' के साथ पैटर्न को फिर से बनाना, फिर से हटाना होगा:
% rm -rf ** / <पैटर्न>
हालाँकि, यदि हटाने के लिए बहुत सारी फाइलें हैं, तो आपको xargs (1) या -exec के साथ खोजने के लिए (1) का सहारा लेना चाहिए , और मैं शेल स्क्रिप्ट में भी ऐसा करने की सलाह देता हूं।