समस्या यह है, आपने अपने -nameपैरामीटर को उद्धृत नहीं किया है । इसके बजाय यह करें:
find . -name '*.java'
व्याख्या
उद्धरण के बिना, शेल *.javaएक ग्लोब पैटर्न के रूप में व्याख्या करता है और इसे पास करने से पहले ग्लोब से मेल खाने वाले किसी भी फ़ाइल नाम के लिए विस्तारित करता है find। इस तरह, यदि आप foo.javaवर्तमान निर्देशिका में कहें, तो findवास्तविक कमांड लाइन होगी:
find . -name foo.java
जो स्पष्ट रूप से वर्तमान निर्देशिका में फ़ाइल को सूचीबद्ध करेगा (जब तक कि आपके पास पेड़ के नीचे कुछ इसी तरह की नाम वाली फाइलें न हों)।
कोटिंग ग्लोब विस्तार को रोकता है और कमांड लाइन को इस findतरह से पास करता है।
संयोग से, अगर ग्लोब मैच करने में असफल रहा ( *.javaवर्तमान निर्देशिका में कोई फाइल नहीं ), तो आपको दो व्यवहारों में से एक पर निर्भर करेगा कि आपके शेल को ग्लब्स से निपटने के लिए कैसे सेट किया गया है जो मेल नहीं खाते (यह nullglobबैश में विकल्प द्वारा नियंत्रित होता है। , उदाहरण के लिए):
- यदि एक ग्लोब जो मेल नहीं खाता है, शेल द्वारा विस्तारित नहीं होता है,
findतो (गलती से, आपके मन में) सही व्यवहार प्रदर्शित करेगा।
- यदि एक ग्लोब जो मेल नहीं खाता है, शेल द्वारा एक खाली स्ट्रिंग में विस्तारित किया गया है,
findतो शिकायत करेगा कि यह एक तर्क को याद कर रहा है -name।