यहाँ एक सुरक्षित तरीका है:
grep -lrIZ foo . | xargs -0 rm -f --
-l प्रिंट पैटर्न खोज से मेल खाती फाइलों के नाम दर्ज करता है।
-rfooदिए गए निर्देशिका में पैटर्न के लिए एक पुनरावर्ती खोज करता है .। यदि यह काम नहीं करता है, तो प्रयास करें -R।
-I(पूंजी i) पीडीएफ की तरह बाइनरी फ़ाइलों को छोड़ दिया जाता है।
-Z यह सुनिश्चित करता है कि फ़ाइल नाम शून्य हैं (यानी, nul-) को समाप्त कर दिया गया है ताकि सफेद स्थान वाले नाम की गलत तरीके से व्याख्या न हो (यानी, एक के बजाय कई नाम)।
xargs -0शून्य (nul) बाइट्स द्वारा शब्दों को अलग grepकरने से फ़ाइल नामों को खिलाता rm -fहै ( -Zसे विकल्प याद रखें grep)।
--अक्सर भूल जाता है लेकिन विकल्पों के अंत को चिह्नित करना और उन फ़ाइलों को हटाने की अनुमति देना बहुत महत्वपूर्ण है जिनके नाम के साथ शुरू होता है -।
यदि आप यह देखना चाहते हैं कि कौन सी फाइलें डिलीट होने वाली हैं, तो केवल उस | xargs -0 rm -f --हिस्से को हटा दें , और Zविकल्प को छोड़ दें grep।
एक अन्य उपयोगकर्ता ने निम्नलिखित की तरह कुछ सुझाया, जिसे आपको असुरक्षित नहीं होना चाहिए :
files=`grep foo * | cut -d: -f1`
rm -f $files # unsafe, do not run it!
अगर मेरे पास ऐसी फाइलें हैं, ImportantStuffजिन्हें मैं हटाना नहीं चाहता और obsolete ImportantStuffशामिल करना चाहता fooहूं, तो मैं इस कमांड को चलाने के दौरान ImportantStuff(और नहीं obsolete ImportantStuff !) खो देता हूं, क्योंकि $filesइसकी व्याख्या होने पर रिक्त स्थान टूट जाता है। इस तरह से स्केलर शेल चर में फ़ाइलनाम की सूची डालना खतरनाक है।