जवाबों:
findनिष्पादित किए जाने से पहले खोल द्वारा एक अयोग्य ग्लोब का विस्तार किया जाएगा । ( मैनुअल में फाइलनेम विस्तार का संदर्भ लें ।)
इसलिए कह रहा है:
find . -name *.pyc -delete
वास्तव में निष्पादित करेगा:
find . -name file1.pyc file2.pyc file3.pyc -delete
यह मानते हुए कि वर्तमान निर्देशिका में 3 .pyc फाइलें थीं और इसके बजाय एक त्रुटि हुई।
एक बैकस्लैश शेल को ग्लोब पास करता है find, अर्थात यह ऐसा कार्य करता है जैसे कि *.pycउद्धृत किया गया हो।
आदर्श रूप से, आपको एक ग्लोब को उद्धृत करना चाहिए:
find . -name '*.pyc' -delete
आपके शेल findकमांड जारी करने से पहले , यह विभिन्न विस्तार करेगा । ऐसा करने पर, यह विशेष वर्ण (या, विशेष अर्थ वाले वर्ण) को संसाधित करता है, जहां *वाइल्डकार्ड है - एक ग्लोबिंग चरित्र। यह तथाकथित फ़ाइल नाम विस्तार है।
कहो कि आपकी निर्देशिका में दो फाइलें हैं:
foo.pycbar.pycफिर *.pycदोनों नामों का विस्तार होगा। इसलिए यदि आप लिखते हैं:
find . -name *.pyc -delete
तब शेल वास्तव में कॉल करेगा:
find . -name foo.pyc bar.pyc -delete
जो बहुत मायने नहीं रखता है, क्योंकि आपके लिए केवल एक तर्क हो सकता है -name। इसलिए आपको शेल द्वारा व्याख्या किए जाने से रोकने के लिए विशेष चरित्र से बचने की आवश्यकता है। आप इसे पीछे छोड़ते हुए या वैकल्पिक रूप से उद्धृत करके करते हैं।
findमें एक अनुभाग होना चाहिए जिसेNON-BUGSउदाहरण के रूप में कुछ समान कहा जाता है और इसकी व्याख्या की आवश्यकता है कि इसकी आवश्यकता क्यों है।