मैं मौजूदा निर्देशिका में सभी साधारण जावा (एक रेगेक्स नहीं) और ओएस एक्स पर सभी उप-निर्देशिकाओं के लिए .java फाइलें कैसे खोजूंगा? मैं केवल फ़ाइल और निर्देशिका नामों की एक सूची प्रिंट करना चाहता हूं जो मेल खाते हों।
मैं मौजूदा निर्देशिका में सभी साधारण जावा (एक रेगेक्स नहीं) और ओएस एक्स पर सभी उप-निर्देशिकाओं के लिए .java फाइलें कैसे खोजूंगा? मैं केवल फ़ाइल और निर्देशिका नामों की एक सूची प्रिंट करना चाहता हूं जो मेल खाते हों।
जवाबों:
और हमेशा लोकप्रिय
find . -name '*.java' | xargs grep -l 'string'
EDIT (फ्रैंक स्ज़ीकुट्टा द्वारा):
यदि आप फ़ाइलनाम या निर्देशिका के साथ काम कर रहे हैं, जिसमें उनके स्थान हैं, तो ऐसा करने का सबसे सुरक्षित तरीका है:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
वहाँ हमेशा यह करने के लिए एक से अधिक तरीका है।
पारंपरिक UNIX उत्तर वह होगा जो इस प्रश्न के लिए स्वीकार किया गया था:
find . -name '*.java' | xargs grep -l 'string'
यह संभवतः जावा फाइलों के लिए काम करेगा, लेकिन पारंपरिक यूनिक्स दुनिया की तुलना में मैक पर फ़ाइलनाम में रिक्त स्थान बहुत अधिक सामान्य हैं। जब रिक्त स्थान के साथ फ़ाइलनाम ऊपर पाइपलाइन के माध्यम से पारित हो जाते हैं, तो xargs अलग-अलग नामों के रूप में अलग-अलग शब्दों की व्याख्या करेगा।
सीमाओं को असंदिग्ध बनाने के लिए नामों को अलग करने के लिए आपको वास्तव में क्या चाहिए:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
विकल्प यह है कि मार्क के लिए रन grep ढूंढने दें, क्योंकि मार्क बताता है कि यदि आप बड़ी संख्या में फाइलों को खोज रहे हैं, तो यह धीमा है (क्योंकि grep को एक बार फाइल की पूरी सूची के बजाय एक बार फाइल में इनवाइट किया गया है)।
ग्रेप कि ग्रेप, से बेहतर है का उपयोग करें पावती :
ack -l --java "string"
यह वास्तव में अगर आप चाहते हैं तो एक रेक्सक्स का उपयोग करेंगे, बस मेटाचैकर्स से दूर रहें, या उनसे बच जाएं, और आप स्ट्रिंग्स की खोज कर सकते हैं।
find . -iname "*.java" -exec egrep -il "search string" {} \;
grep -rl --include="*.java" simplestring *
कमांड लाइन से छोड़ें find
और उपयोग करें Spotlight
। बहुत अधिक शक्तिशाली!
COMMAND LINE SPOTLIGHT - FIND MEETS GREP
ज्यादातर लोग नहीं जानते कि आप कमांड लाइन से स्पॉटलाइट खोज कर सकते हैं। याद रखें कि सभी आर्कन खोज और grep विकल्प क्या हैं और क्या नहीं जब आप स्पॉटलाइट को आपके लिए काम करने दे सकते हैं। स्पॉटलाइट के लिए कमांड लाइन इंटरफ़ेस को mdfind कहा जाता है। यह GUI स्पॉटलाइट खोज और अधिक के रूप में सभी समान शक्ति है क्योंकि यह कमांड लाइन पर स्क्रिप्ट करने योग्य है!
यह एक जाने दो:
grep -rl "string" */*java
आप इंटरफ़ेस में विकल्प हैं जहाँ अधिक सहज खोज करने के लिए TextWrangler जैसे GUI प्रोग्राम का उपयोग कर सकते हैं।
grep "(your string)" -rl $(find ./ -name "*.java")
यदि आप मामले को नजरअंदाज करना चाहते हैं, तो जगह-sur -irl के साथ। (आपका तार) भी एक आवेश हो सकता है यदि आप कभी भी आवश्यकता देखते हैं।