लिनक्स पर सिर्फ फ़ाइल नाम दिखाने के लिए मैं grep का उपयोग कैसे कर सकता हूं?


1067

मैं grepलिनक्स पर सिर्फ फ़ाइल-नाम (कोई इन-लाइन मैचों) दिखाने के लिए कैसे उपयोग कर सकता हूं ?

मैं आमतौर पर कुछ का उपयोग कर रहा हूँ जैसे:

find . -iname "*php" -exec grep -H myString {} \;

मैं केवल फ़ाइल-नाम (पथ के साथ) कैसे प्राप्त कर सकता हूं, लेकिन मैचों के बिना? क्या मुझे उपयोग करना है xargs? मुझे अपने grepमैन पेज पर ऐसा करने का कोई रास्ता नहीं दिखा ।


3
आप का मतलब है, आप कम से कम एक मैच है कि filenames चाहते हैं?
leonbloy

4
बड़ा सवाल है। मैंने वास्तव में इसका उपयोग Vim में grep द्वारा दी गई फ़ाइलों की सूची को खोलने के लिए करना शुरू कर दिया। vim $(grep -rl Something app/)
डेविड टाइट

1
आप grep कमांड का उपयोग करके फ़ाइलों को सूचीबद्ध नहीं कर सकते हैं, यह मूल रूप से फ़ाइल या सूची से वांछित पाठ लाने के लिए उपयोग किया जाता है। उदाहरण के लिए, ps aux | grep 'apt-get' या grep 'text-to-find' / path / to / file /
iamjayp

जवाबों:


1624

मानक विकल्प grep -l(जो कि लोअरकेस एल है) ऐसा कर सकता है।

से यूनिक्स मानक :

-l
    (The letter ell.) Write only the names of files containing selected
    lines to standard output. Pathnames are written once per file searched.
    If the standard input is searched, a pathname of (standard input) will
    be written, in the POSIX locale. In other locales, standard input may be
    replaced by something more appropriate in those locales.

आपको -Hइस मामले में भी ज़रूरत नहीं है ।


37
इस विकल्प का दस्तावेज़ीकरण (जैसा कि ज्यादातर आदमी फाइलों में होता है) इतना अस्पष्ट है! Pfff ... कमाल है कि कैसे आदमी गधे में दर्द हो सकता है।
महाशय

1
-वह खुद भी मैच दिखाता है। सवाल सिर्फ फिल्मी लोगों का था।
हाऊक

@ हॉक और मेरा जवाब था -एल। मैंने -H का उल्लेख केवल इसलिए किया क्योंकि प्रश्न में उपयोगकर्ता की कमांड शामिल है -H और यह बेमानी है जब -l दिया जाता है।
रैंडम 832

2
अच्छा है, मैं व्यक्तिगत रूप से अन्य झंडों के साथ इसका उपयोग करना पसंद करता हूं, grep -nrl "some text" .जब सबफ़ोल्डर्स के एक सेट में पाठ की तलाश में पुनरावृत्ति होती है
Openwonk

142

से grep(1)आदमी पेज:

  -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)

4
पहले मैच में रोकना आवश्यक और प्रकृति है।
थॉमसन

7
दस्तावेज़ीकरण इसे थोड़ा अस्पष्ट बनाता है। "पहले मैच पर स्कैनिंग बंद हो जाएगी" - इंगित करता है कि सभी फ़ाइल नाम मुद्रित होंगे, लेकिन मिलान शब्द के लिए स्कैनिंग पहली घटना पर बंद हो जाएगी।
TheMonkWhoSoldHisCode

2
@VishalP: चूंकि हमें परवाह नहीं है कि घटनाएँ कहाँ हैं, केवल यह कि वे मौजूद हैं, पहली घटना से परे प्रत्येक फ़ाइल को खोजने का कोई मतलब नहीं है।
इग्नासियो वाज़केज़-अब्राम्स

17
@ इग्नासिओवेज़क्वेज़-एब्स बिल्कुल। दस्तावेज़ का पहला प्रभाव आपको लगता है कि यह केवल पहली फ़ाइल का फ़ाइल नाम प्रिंट करेगा। आपको इसे समझने के लिए वास्तव में कुछ पढ़ने की जरूरत है।
TheMonkWhoSoldHisCode

5
'वर्तमान फ़ाइल की स्कैनिंग पहले मैच पर रोक देगी।' अधिक स्पष्ट होगा।
सॉरीमिसजैकसन

37

एक साधारण फ़ाइल खोज के लिए आप grep -lऔर -rविकल्पों का उपयोग कर सकते हैं :

grep -rl "mystring"

सभी खोज ग्रीप द्वारा की जाती है। बेशक, अगर आपको किसी अन्य पैरामीटर पर फ़ाइलों का चयन करने की आवश्यकता है, तो इसका सही समाधान है:

find . -iname "*.php" -execdir grep -l "mystring" {} +

execdirविकल्प प्रत्येक निर्देशिका प्रति प्रत्येक ग्रेप आदेश बनाता है, और संयोजित केवल एक ही आदेश में बदल दें ( +)।


0

आपका प्रश्न मैं केवल फ़ाइल-नाम कैसे प्राप्त कर सकता हूं (पथ के साथ)

आपका वाक्यविन्यास उदाहरण खोजते हैं। -नाम "* php" -exec grep -H myString {} \;

मेरा आदेश सुझाव

sudo find /home -name *.php

मेरे लिनक्स OS पर इस कमांड से आउटपुट:

लिखें नमूना -3 / html / मेल / contact_me.php

जैसा कि आपको पथ के साथ फ़ाइल नाम की आवश्यकता है, आनंद लें!


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