मैं छिपी हुई फ़ाइलों को कैसे पकड़ सकता हूं?


96

मैं एक जीआईटी रिपॉजिटरी के माध्यम से खोज कर रहा हूं और .gitफ़ोल्डर को शामिल करना चाहूंगा ।

grep अगर मैं चलाऊं तो यह फ़ोल्डर शामिल नहीं है

grep -r search *

इस फ़ोल्डर को शामिल करने के लिए एक grep कमांड क्या होगा?

जवाबों:


135

कृपया इस पोस्ट के अंत में समाधान के लिए एक बेहतर विकल्प के रूप में देखें जो आप कर रहे हैं।

आप छिपी हुई फ़ाइलों को स्पष्ट रूप से शामिल कर सकते हैं (एक निर्देशिका भी एक फ़ाइल है)।

grep -r search * .*

*छिपा हुआ एक को छोड़कर सभी फाइलों का मिलान करेगा और .*केवल छिपा फ़ाइलों से मेल खाएगी। हालाँकि, यह विफल हो जाएगा अगर कोई गैर-छिपी हुई फ़ाइलें नहीं हैं या किसी निर्देशिका में कोई छिपी हुई फ़ाइलें नहीं हैं। आप निश्चित रूप से .gitइसके बजाय स्पष्ट रूप से जोड़ सकते हैं .*

हालाँकि, यदि आप किसी दिए गए निर्देशिका में खोज करना चाहते हैं, तो इसे इस तरह से करें:

grep -r search .

.वर्तमान पथ, जो दोनों गैर छिपा हुआ और छिपा फ़ाइलों को शामिल करेगा भरपाई कर देंगे।


1
पहला दृष्टिकोण (grep -r खोज *। *) मेरे लिए काम किया। दूसरा दृष्टिकोण (grep -r खोज।) स्ट्रिंग नहीं मिला। मुझे "-r" को छोड़ने और केवल शीर्ष-स्तरीय निर्देशिका की खोज करने पर समान परिणाम मिले। मैं ग्नू grep 2.6.3 का उपयोग कर रहा हूं।
एलन

@ एलन: यह अजीब है। मैं इसे नियमित रूप से उपयोग करता हूं। क्या आपने इसे उसी निर्देशिका पर आज़माया था?
बिटमास्क

27
उपयोग .*करने में मूल निर्देशिका शामिल होगी (क्योंकि ..मैच)
sehe

1
क्या इस समाधान के बारे में सामान्यीकरण करना सुरक्षित है क्योंकि शेल्स के बीच व्यवहार भिन्न हो सकते हैं?
खगोलशास्त्री

6
पहले संस्करण के लिए आपको मूल फ़ोल्डर में खोज से बचने के लिए --exclude-dir = .. जोड़ना चाहिए
user762353

12

मैं सिर्फ इस समस्या में भाग गया, और @ bitmask के उत्तर के आधार पर, यहाँ @ @ द्वारा बताई गई समस्या से बचने के लिए मेरा सरल संशोधन है:

grep -r search_string * .[^.]*

मुझे इसका उपयोग करने का कोई परिणाम नहीं मिलता है: sudo grep -r ANDROID_HOME * .[^.]*मैं यहां क्या गलत कर रहा हूं?
मेसर्बिल

@messerbill आप खोज कहां चला रहे हैं?
इन्सान

3

शायद आप "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

2

आप इस दृष्टिकोण का उपयोग करना चाह सकते हैं, यह मानते हुए कि आप वर्तमान निर्देशिका खोज रहे हैं (अन्यथा वांछित निर्देशिका के साथ प्रतिस्थापित करें):

find . -type f | xargs grep search

या यदि आप केवल शीर्ष स्तर पर खोज करना चाहते हैं (जो कि यदि आप इन्हें आज़मा रहे हैं तो परीक्षण करने में तेज़ हैं):

find . -type f -maxdepth 1 | xargs grep search

अद्यतन: मैंने स्कॉट की टिप्पणियों के जवाब में उदाहरणों को संशोधित किया। मैंने "-type f" भी जोड़ा।


1
(1)  ~उपयोगकर्ता की होम डायरेक्टरी है। सवाल उपयोगकर्ता के घर निर्देशिका के बारे में नहीं था, इसलिए उत्तर का उल्लेख नहीं करना चाहिए  ~। (2) एक  findकमांड में, -name '*'एक नो-ऑप है (यानी, यह बिना किसी उद्देश्य के कार्य करता है)।
स्कॉट

1

अपने वर्तमान स्थान से केवल सभी छिपी हुई फ़ाइलों और निर्देशिकाओं को खोजने के लिए:

find . -name ".*" -exec grep -rs search {} \;

केवल सभी छिपी हुई फ़ाइलें:

find . -name ".*" -type f -exec grep -s search {} \;

केवल सभी छिपी निर्देशिका:

find . -name ".*" -type d -exec grep -rs search {} \;

1

अन्य सभी उत्तर बेहतर हैं। यह याद रखना आसान हो सकता है:

find . -type f | xargs grep search

यह केवल फ़ाइलें (छिपी सहित) और प्रत्येक फ़ाइल को greps पाता है।


0

केवल एक निश्चित फ़ोल्डर के भीतर खोजने के लिए आप इसका उपयोग कर सकते हैं:

ls -al | grep " \."

यह grep को सूचीबद्ध करने और पाइप करने के लिए एक बहुत ही सरल कमांड है।


0

टायलर के सुझाव के अलावा, यहाँ सभी फ़ाइलों और फ़ोल्डरों को छिपी हुई फ़ाइलों सहित पुनरावृत्ति करने की आज्ञा है

find . -name "*.*" -exec grep -li 'search' {} \;

0

मिलान को रोकने के लिए .और ..जो फ़ाइलें छिपा नहीं कर रहे हैं, तो आप उपयोग कर सकते हैं grepके साथ ls -Aइस उदाहरण की तरह:

ls -A | grep "^\."

^\. बताता है कि पहला चरित्र होना चाहिए .

-Aया --almost-allविकल्प शामिल नहीं परिणामों .और ..इसलिए है कि केवल छिपा फ़ाइलों और निर्देशिकाओं मिलान किया जाता है।


0

आप विशिष्ट प्रकार की छिपी हुई फ़ाइलों को भी खोज सकते हैं जैसे कि छिपी हुई निर्देशिका फ़ाइलों के लिए:

grep -r --include=*.directory "search-string"

यह अन्य विकल्पों में से कुछ से बेहतर काम कर सकता है। काम करने वाले अन्य विकल्प बहुत धीमे हो सकते हैं।

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