मैं एक जीआईटी रिपॉजिटरी के माध्यम से खोज कर रहा हूं और .git
फ़ोल्डर को शामिल करना चाहूंगा ।
grep
अगर मैं चलाऊं तो यह फ़ोल्डर शामिल नहीं है
grep -r search *
इस फ़ोल्डर को शामिल करने के लिए एक grep कमांड क्या होगा?
मैं एक जीआईटी रिपॉजिटरी के माध्यम से खोज कर रहा हूं और .git
फ़ोल्डर को शामिल करना चाहूंगा ।
grep
अगर मैं चलाऊं तो यह फ़ोल्डर शामिल नहीं है
grep -r search *
इस फ़ोल्डर को शामिल करने के लिए एक grep कमांड क्या होगा?
जवाबों:
कृपया इस पोस्ट के अंत में समाधान के लिए एक बेहतर विकल्प के रूप में देखें जो आप कर रहे हैं।
आप छिपी हुई फ़ाइलों को स्पष्ट रूप से शामिल कर सकते हैं (एक निर्देशिका भी एक फ़ाइल है)।
grep -r search * .*
*
छिपा हुआ एक को छोड़कर सभी फाइलों का मिलान करेगा और .*
केवल छिपा फ़ाइलों से मेल खाएगी। हालाँकि, यह विफल हो जाएगा अगर कोई गैर-छिपी हुई फ़ाइलें नहीं हैं या किसी निर्देशिका में कोई छिपी हुई फ़ाइलें नहीं हैं। आप निश्चित रूप से .git
इसके बजाय स्पष्ट रूप से जोड़ सकते हैं .*
।
हालाँकि, यदि आप किसी दिए गए निर्देशिका में खोज करना चाहते हैं, तो इसे इस तरह से करें:
grep -r search .
.
वर्तमान पथ, जो दोनों गैर छिपा हुआ और छिपा फ़ाइलों को शामिल करेगा भरपाई कर देंगे।
.*
करने में मूल निर्देशिका शामिल होगी (क्योंकि ..
मैच)
मैं सिर्फ इस समस्या में भाग गया, और @ bitmask के उत्तर के आधार पर, यहाँ @ @ द्वारा बताई गई समस्या से बचने के लिए मेरा सरल संशोधन है:
grep -r search_string * .[^.]*
sudo grep -r ANDROID_HOME * .[^.]*
मैं यहां क्या गलत कर रहा हूं?
शायद आप "grep" को पूर्ण समाधान के लिए "खोज" कमांड के साथ जोड़ना पसंद करेंगे:
find . -exec grep -Hn search {} \;
यह कमांड स्ट्रिंग "सर्च" के लिए छिपी हुई फाइलों या निर्देशिकाओं के अंदर खोज करेगा और इस आउटपुट फॉर्मेट के संयोग वाली किसी भी फाइल को सूचीबद्ध करेगा:
फ़ाइल पथ: लाइन नंबर: संयोग के साथ लाइन
./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line
आप इस दृष्टिकोण का उपयोग करना चाह सकते हैं, यह मानते हुए कि आप वर्तमान निर्देशिका खोज रहे हैं (अन्यथा वांछित निर्देशिका के साथ प्रतिस्थापित करें):
find . -type f | xargs grep search
या यदि आप केवल शीर्ष स्तर पर खोज करना चाहते हैं (जो कि यदि आप इन्हें आज़मा रहे हैं तो परीक्षण करने में तेज़ हैं):
find . -type f -maxdepth 1 | xargs grep search
अद्यतन: मैंने स्कॉट की टिप्पणियों के जवाब में उदाहरणों को संशोधित किया। मैंने "-type f" भी जोड़ा।
~
उपयोगकर्ता की होम डायरेक्टरी है। सवाल उपयोगकर्ता के घर निर्देशिका के बारे में नहीं था, इसलिए उत्तर का उल्लेख नहीं करना चाहिए ~
। (2) एक find
कमांड में, -name '*'
एक नो-ऑप है (यानी, यह बिना किसी उद्देश्य के कार्य करता है)।
अपने वर्तमान स्थान से केवल सभी छिपी हुई फ़ाइलों और निर्देशिकाओं को खोजने के लिए:
find . -name ".*" -exec grep -rs search {} \;
केवल सभी छिपी हुई फ़ाइलें:
find . -name ".*" -type f -exec grep -s search {} \;
केवल सभी छिपी निर्देशिका:
find . -name ".*" -type d -exec grep -rs search {} \;
केवल एक निश्चित फ़ोल्डर के भीतर खोजने के लिए आप इसका उपयोग कर सकते हैं:
ls -al | grep " \."
यह grep को सूचीबद्ध करने और पाइप करने के लिए एक बहुत ही सरल कमांड है।
टायलर के सुझाव के अलावा, यहाँ सभी फ़ाइलों और फ़ोल्डरों को छिपी हुई फ़ाइलों सहित पुनरावृत्ति करने की आज्ञा है
find . -name "*.*" -exec grep -li 'search' {} \;
मिलान को रोकने के लिए .
और ..
जो फ़ाइलें छिपा नहीं कर रहे हैं, तो आप उपयोग कर सकते हैं grep
के साथ ls -A
इस उदाहरण की तरह:
ls -A | grep "^\."
^\.
बताता है कि पहला चरित्र होना चाहिए .
-A
या --almost-all
विकल्प शामिल नहीं परिणामों .
और ..
इसलिए है कि केवल छिपा फ़ाइलों और निर्देशिकाओं मिलान किया जाता है।
आप विशिष्ट प्रकार की छिपी हुई फ़ाइलों को भी खोज सकते हैं जैसे कि छिपी हुई निर्देशिका फ़ाइलों के लिए:
grep -r --include=*.directory "search-string"
यह अन्य विकल्पों में से कुछ से बेहतर काम कर सकता है। काम करने वाले अन्य विकल्प बहुत धीमे हो सकते हैं।