"Grep -r foo *" बनाम "grep -r foo।"


10

Grep -r का उपयोग करते समय आप सभी फाइलों में * या के साथ खोज कर सकते हैं। और यह उसी चीज़ को वापस करने के लिए लगता है लेकिन क्या यह वास्तव में एक ही है?

मान लीजिए कि मैं "फू" के लिए खोज करता हूं, तो मैं लिख सकता हूं

grep -r foo *

या

grep -r foo .

किसी के बीच के अंतर को समझाने की कोशिश करेंगे। तथा *?

जवाबों:


15

grep -r foo *छिपी हुई फ़ाइलों या निर्देशिकाओं में मेल की तलाश नहीं करता *है, शेल द्वारा भी विस्तारित किया जाता है ताकि आप एक Argument सूची के साथ समाप्त हो सकें जब वर्तमान निर्देशिका में बहुत सारी प्रविष्टियां हों, या कुछ अन्य त्रुटियां या दुर्व्यवहार हो तो फ़ाइलों या निर्देशिकाओं में से कुछ का नाम डैश वर्ण से शुरू होता है।

मंगलाचरण grep -r foo .में उपरोक्त दोष नहीं हैं

अपडेट किया गया:

एक और अंतर: grep का मैन पेज (@ fedora17) कहता है:

-r, --recursive
    Read all files under each directory, recursively, following symbolic links only if they
    are on  the  command  line.  ...

जब आप खाली निर्देशिका में इस कमांड को निष्पादित करते हैं, तो एक अंतर भी होगा:

$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$

4

यदि आप तारांकन का उपयोग करते हैं, तो आप उन निर्देशिकाओं में फ़ाइलों का मिलान नहीं कर सकते हैं, जिनका नाम डॉट के साथ शुरू होता है, जैसे .cache

अपडेट करें:

ऐसा इसलिए है क्योंकि *कॉल करने से पहले शेल द्वारा इसका विस्तार किया जाता है grep, इसलिए यह एकल निर्देशिका नाम (वर्तमान के लिए .) के बजाय नामों की एक सूची प्राप्त करता है । शेल का विस्तार करने का तरीका शेल पैरामीटर (जैसे nullglob, nocaseglobया अन्य bashविकल्प) के साथ अनुकूलित किया जा सकता है या पर्यावरण चर (जैसे LANGया LC_ALL) हो सकता है

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