मेरा खोज पुनरावर्ती क्यों नहीं है?


65

मैं निम्नलिखित कमांड चला रहा हूं, लेकिन यह पुनरावर्ती नहीं किया गया है:

find . -name *.java

मुझे पता है कि वर्तमान निर्देशिका में जावा फाइलें और नीचे हैं, लेकिन यह findकेवल वर्तमान निर्देशिका पर प्रदर्शन कर रही है । मैं ओएस एक्स, 10.9 का उपयोग कर रहा हूं।


@ गिल्स: यह क्यूएंडए डुबकी की तुलना में बहुत स्पष्ट और कम स्थानीयकृत है - यदि उनमें से एक को बंद किया जाना चाहिए, तो यह दूसरा है।
गोल्डीलॉक्स

जवाबों:


88

समस्या यह है, आपने अपने -nameपैरामीटर को उद्धृत नहीं किया है । इसके बजाय यह करें:

find . -name '*.java'

व्याख्या

उद्धरण के बिना, शेल *.javaएक ग्लोब पैटर्न के रूप में व्याख्या करता है और इसे पास करने से पहले ग्लोब से मेल खाने वाले किसी भी फ़ाइल नाम के लिए विस्तारित करता है find। इस तरह, यदि आप foo.javaवर्तमान निर्देशिका में कहें, तो findवास्तविक कमांड लाइन होगी:

find . -name foo.java

जो स्पष्ट रूप से वर्तमान निर्देशिका में फ़ाइल को सूचीबद्ध करेगा (जब तक कि आपके पास पेड़ के नीचे कुछ इसी तरह की नाम वाली फाइलें न हों)।

कोटिंग ग्लोब विस्तार को रोकता है और कमांड लाइन को इस findतरह से पास करता है।

संयोग से, अगर ग्लोब मैच करने में असफल रहा ( *.javaवर्तमान निर्देशिका में कोई फाइल नहीं ), तो आपको दो व्यवहारों में से एक पर निर्भर करेगा कि आपके शेल को ग्लब्स से निपटने के लिए कैसे सेट किया गया है जो मेल नहीं खाते (यह nullglobबैश में विकल्प द्वारा नियंत्रित होता है। , उदाहरण के लिए):

  1. यदि एक ग्लोब जो मेल नहीं खाता है, शेल द्वारा विस्तारित नहीं होता है, findतो (गलती से, आपके मन में) सही व्यवहार प्रदर्शित करेगा।
  2. यदि एक ग्लोब जो मेल नहीं खाता है, शेल द्वारा एक खाली स्ट्रिंग में विस्तारित किया गया है, findतो शिकायत करेगा कि यह एक तर्क को याद कर रहा है -name

20

मेरे पास एक ऐसी स्थिति थी जहां मैं उद्धरणों में -name मान के आस-पास था, लेकिन अभी भी उन सभी हिट फिल्मों को प्राप्त नहीं कर रहा था, जिनकी मुझे उम्मीद थी। मैंने अनुमान लगाया कि यह सहानुभूति के कारण था और निश्चित रूप से ऐसा ही था। यदि आप खोज को सिम्बलिंक के माध्यम से खोजने के लिए बाध्य करना चाहते हैं तो आप कमांड को निम्न में संशोधित कर सकते हैं:

find -L . -name '*.java'

सिम्बलिंक भी मेरा मुद्दा था। -followके लिए एक अधिक पठनीय पर्यायवाची है -L, जब तक कि आप इसे अन्य पैरामेट्स के सामने रखते हैं।
नूमेनन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.