2010-09-24 10 views
23

के लिए उनके साथ खोजें, मुझे लिनक्स सिस्टम पर 'filename.ext' के सभी उदाहरण ढूंढने की आवश्यकता है और देखें कि कौन से टेक्स्ट 'lookingfor' टेक्स्ट हैं।लिनक्स सिस्टम पर 'नाम' से मेल खाने वाली सभी फाइलें खोजें, और 'टेक्स्ट'

क्या लिनक्स कमांड लाइन ऑपरेशंस का एक सेट है जो काम करेगा?

उत्तर

27
find/-type f -name filename.ext -exec grep -l 'lookingfor' {} + 

समाप्त करने का आदेश \; तुलना में अधिक कुशल है find उन्हें एक एक करके भेजने के बजाय grep करने के लिए फ़ाइलों का बड़ा समूह भेजता है एक + का उपयोग करना। यह प्रत्येक एकल फ़ाइल के लिए एक कांटा/निष्पादन से बचाता है जो पाया जाता है।

कुछ समय पहले मैं xargs के प्रदर्शन बनाम {} + बनाम {} \; तुलना करने के लिए कुछ परीक्षण किया था और मैंने पाया कि {} + तेजी से किया गया था। यहाँ मेरी परिणाम में से कुछ हैं:

time find . -name "*20090430*" -exec touch {} + 
real 0m31.98s 
user 0m0.06s 
sys  0m0.49s 

time find . -name "*20090430*" | xargs touch 
real 1m8.81s 
user 0m0.13s 
sys  0m1.07s 

time find . -name "*20090430*" -exec touch {} \; 
real 1m42.53s 
user 0m0.17s 
sys  0m2.42s 
+0

मैं केवल '--color' को' grep' में जोड़ूंगा, मुझे विश्वास है कि चीजों को देखना बहुत आसान है। असल में, मुझे अभी एहसास हुआ कि यह 'alashrc' में परिभाषित उपनाम नहीं लेता है। – Alexandre

1

प्रयास करें:

find/-type f -name filename.ext -exec grep -H -n 'lookingfor' {} \; 

find खोजें रिकर्सिवली filename.ext नामित फ़ाइलों के लिए और हर पाया घटना के लिए यह lookingfor के लिए और पाया प्रिंट अगर लाइन नंबर खोज फ़ाइल नाम पर ग्रेप चलाता जड़ / से शुरू (-n) और फ़ाइल का नाम (-H)।

+0

को देखते हुए फ़ाइलों की भारी संख्या , यह 'xargs' का उपयोग करने के लिए और अधिक कुशल है जो केवल एक बार' grep' शुरू करेगा, जैसे कि digen के उत्तर में। –

3

एक और अधिक सरल एक हो सकता है,

find/-type f -name filename.ext -print0 | xargs -0 grep 'lookingfor' 

-print0 & 0 xargs के लिए एक एकल निर्देशिका में फ़ाइलों की बड़ी संख्या की समस्या को कम होगा खोजने के लिए।

+1

'-print0' और' -0' की बड़ी संख्या में फ़ाइलों के साथ कुछ लेना देना नहीं है। यह सुनिश्चित करता है कि 'ढूंढें | xargs' काम करता है जब कुछ फ़ाइल में उनके नामों में स्पेस वर्ण होते हैं। –

+0

डिडिएर आप इस में बिल्कुल सही हैं, यहां हर किसी के लिए मैन पेज से अंश है, -प्रिंटसच है; मानक आउटपुट पर पूर्ण फ़ाइल नाम मुद्रित करें, का पालन एक शून्य चरित्र द्वारा किया गया है ( -प्रिंट उपयोग के लिए न्यूलाइन वर्ण के बजाय)। यह फ़ाइल नामों की अनुमति देता है जिनमें न्यूलाइन या अन्य प्रकार की श्वेत स्थान शामिल होती है ताकि प्रो - ग्राम द्वारा सही ढंग से व्याख्या की जा सके जो खोज आउटपुट को संसाधित करते हैं। यह विकल्प xargs के -0 विकल्प से मेल खाता है। – digen

6

संबंधित निर्देशिका पर जाएं और निम्न आदेश टाइप करें।

ढूंढें। -नाम "* .ext" | xargs grep 'lookingfor'

0

मैं निम्न आदेश का सबसे सरल उपाय है:

grep -R --include="filename.ext" lookingfor 

या -i जोड़ने केस संवेदी खोज करने के लिए:

grep -i -R --include="filename.ext" lookingfor 
संबंधित मुद्दे