मैं पाठ की एक विशिष्ट स्ट्रिंग वाली सभी फ़ाइलों के लिए अपने संपूर्ण लिनक्स सिस्टम को स्कैन करने का एक तरीका खोजने की कोशिश कर रहा हूं। बस स्पष्ट करने के लिए, मैं फ़ाइल के भीतर पाठ की तलाश कर रहा हूं, फ़ाइल नाम में नहीं।
जब मैं देख रहा था कि यह कैसे करना है, तो मैं इस समाधान में दो बार आया:
find / -type f -exec grep -H 'text-to-find-here' {} \;
हालाँकि, यह काम नहीं करता है। यह सिस्टम की हर एक फाइल को प्रदर्शित करता है।
क्या यह इसे करने के उचित तरीके के करीब है? यदि नहीं, तो मुझे कैसे करना चाहिए? फ़ाइलों में टेक्स्ट स्ट्रिंग्स को खोजने की यह क्षमता मेरे द्वारा किए जा रहे कुछ प्रोग्रामिंग प्रोजेक्ट्स के लिए असाधारण रूप से उपयोगी होगी।
-H
साथ बदलें -l
(और शायद grep
साथ fgrep
)। नामों के कुछ पैटर्न के साथ फ़ाइलों को बाहर करने के लिए आप find
अधिक उन्नत तरीके से उपयोग करेंगे । यह उपयोग करने के लिए सीखने लायक है find
, हालांकि। बस man find
।
find … -exec <cmd> +
टाइप करना आसान है और तुलना में तेज है find … -exec <cmd> \;
। यह तभी काम करता है, जब <cmd>
किसी भी संख्या के नाम के तर्कों को स्वीकार किया जाए। निष्पादन समय में बचत विशेष रूप से बड़ी है यदि <cmd>
पायथन या रूबी लिपियों की तरह शुरू करना धीमा है।
grep "pattern" path/*.txt
.
दूसरों के बीच किसी एकल-वर्ण वाइल्डकार्ड के रूप में व्याख्या करेगा । मेरी सलाह है कि fgrep या egrep का उपयोग करें।