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