कैसे लिनक्स में एक निर्देशिका की पूरी सामग्री में एक शब्द के लिए खोज करने के लिए


15

संपूर्ण सामग्री में कुछ खोजने की आवश्यकता है

मैं कोशिश कर रहा हूँ:

find . | xargs grep word

मुझे त्रुटि मिली:

xargs: अनपेक्षित उद्धरण

इसे कैसे प्राप्त किया जाए?

जवाबों:


15

xargsएक ऐसे प्रारूप में इनपुट की अपेक्षा करता है जो कोई अन्य कमांड उत्पन्न नहीं करता है, इसलिए इसका प्रभावी ढंग से उपयोग करना कठिन है। यहां क्या गलत हो रहा है कि आपके पास एक फ़ाइल है जिसका नाम इनपुट पर उद्धृत किया जाना चाहिएxargs (संभवतः युक्त ')।

अगर आपका grep -rया को सपोर्ट करता है-R पुनरावर्ती खोज के लिए विकल्प , तो इसका उपयोग करें।

grep -r word .

अन्यथा, के -execप्राथमिक का उपयोग करें find। यह xargsफ़ाइल नाम पर बाधाओं के बिना, समान प्रभाव प्राप्त करने का सामान्य तरीका है । यथोचित हाल के संस्करण findआपको एक ही कॉल में कई फाइलों को सहायक कमांड में समूहित करने की अनुमति देते हैं। पास /dev/nullहो रहा हैgrep सुनिश्चित है कि यह, प्रत्येक मैच के सामने फ़ाइल नाम प्रदर्शित करेगा, भले ही यह एक एकल फाइल पर कहा जा होता है।

find . -type f -exec grep word /dev/null {} +

पुराने संस्करणों पर find(पुराने सिस्टम या ओपनबीएसडी पर, या कम उपयोगिताओं जैसे कि व्यस्त बॉक्स) केवल एक समय में एक फाइल पर सहायक कमांड को कॉल कर सकते हैं।

find . -type f -exec grep word /dev/null {} \;

के कुछ संस्करणों findऔर xargsएक्सटेंशन हैं जो उन्हें सही ढंग से संवाद करने देते हैं, अशक्त वर्णों को अलग-अलग फ़ाइल नामों का उपयोग करते हैं ताकि किसी भी उद्धरण की आवश्यकता न हो। इन दिनों, केवल OpenBSD में यह सुविधा होती है -exec … {} +

find . -type f -print0 | xargs -0 grep word /dev/null

+1 के लिए विशेष रूप से /dev/null। यह एक उपद्रव है जब आउटपुट प्रारूप अलग-अलग हो सकता है, यह निर्भर करता है कि कितनी फाइलें मेल खाती हैं ... धन्यवाद।
पीटर.ओ.

12

मुझे लगता है कि आप पहले विकल्प का मतलब है

grep पुनरावर्ती, फ़ाइलों के अंदर सामग्री खोजने के लिए

grep -R "content_to_search" /path/to/directory

एलएस पुनरावर्ती है, जो मेल खाने वाली फ़ाइलों की खोज के लिए

ls -lR | grep "your_search"

पुनरावर्ती- case_insensitive-show_line_number के लिए grep -rin

मैं प्रत्येक फ़ाइल की सामग्री में खोज करने में सक्षम होना चाहता हूं।

पहली फ़ाइल किसी भी फ़ाइल में किसी भी ओफ़रेंस को लौटाती है, उस फ़ाइल को निर्दिष्ट करती है जहाँ ऑउरेंस मिली थी

2

यदि आपके पास GNU टूल हैं (जो आप लिनक्स टैग के सटीक होने पर करते हैं) तो आप उपयोग कर सकते हैं -print0और -0सामान्य रूप से उद्धृत समस्याओं के बारे में जान सकते हैं:

find . -type f -print0 | xargs -0 grep word

0

वहाँ भी ack , इसे विशेष निर्देशिकाओं को छोड़ने के लिए डिज़ाइन किया गया है .svn, .gitऔर ऐसे। यह डेवलपर्स के लिए एक दैनिक उपकरण है।

यह करने के लिए बहुत करीब है आम स्विच के लिए।

पूर्व। :

ack -r string .

ack-grepडेबियन और डेबियन पसंद पर पैकेज ।



-1

मुझे लगता है कि आप फ़ाइलों में एक स्ट्रिंग ढूंढना चाहते हैं

प्रयत्न find . -name "*" | xargs grep -l "string"


एक्सरग से त्रुटि संदेश ("अनारक्षित उद्धरण") का अर्थ है कि ओपी में एक फ़ाइल है। जिसके नाम पर एक उद्धरण है। उस पर भी आपकी लाइन टेढ़ी होगी। जैसा कि मु ने उल्लेख किया है, आपको एक अलग समाप्ति की आवश्यकता है।
थिटॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.