मेरा पसंदीदा BASH कमांड है:
find . -name '*.*' -exec grep 'SearchString' {} /dev/null \;
जो निर्दिष्ट SearchString के लिए वर्तमान निर्देशिका में और नीचे सभी फ़ाइलों की सामग्री को खोजता है। एक डेवलपर के रूप में, यह कई बार काम में आया है।
मेरे वर्तमान प्रोजेक्ट के कारण, और मेरे कोडबेस की संरचना के बावजूद, मैं इस BASH कमांड को और भी अधिक उन्नत बनाना चाहता हूं जो कि ".svn", या किसी भी फ़ाइल में मौजूद किसी निर्देशिका में या उससे नीचे की कोई भी फाइल न खोज कर। अंत में ".html"
हालांकि, मुझे भ्रमित करने के लिए मैन पेज खोजें। मैंने -प्र्यून का उपयोग करने की कोशिश की, और इसने मुझे अजीब व्यवहार दिया। केवल .html पृष्ठों (आरंभ करने के लिए) को छोड़ने के प्रयास में, मैंने कोशिश की:
find . -wholename './*.html' -prune -exec grep 'SearchString' {} /dev/null \;
और मुझे वह व्यवहार नहीं मिला जिसकी मुझे आशा थी। मुझे लगता है कि मुझे इस बात की याद आ रही है। क्या तुम लोग मेरी मदद कर सकते हो?
धन्यवाद
grep -rl 'SearchString'
find
किसी फ़ाइल के अंदर खोजने के लिए उपयोग करें।
-name '*.*'
को नहीं ढूंढता है : केवल उनके नाम वाले लोग (का उपयोग आमतौर पर एक डॉस-आईएसएम है, जबकि यूनिक्स में, आप आमतौर पर सिर्फ उसी के लिए उपयोग करते हैं)। वास्तव में उन सभी से मेल खाने के लिए, बस तर्क को पूरी तरह से हटा दें :। या यदि आप केवल फाइलों के लिए grep लागू करना चाहते हैं (और निर्देशिकाओं को छोड़ें) तो करें । .
*.*
*
find . -exec ...
find . -type f -exec ...
find