2012-06-05 8 views
18

मैं उबंटू ओएस पर हूं। मैं सभी लॉग फ़ाइलों के अंदर एक शब्द (XYZ कहता हूं) grep करना चाहता हूं जो 28-मई -2012 से 30-मई -2012 की तिथि सीमा के भीतर बनाए गए हैं।Grep तिथि सीमा के भीतर बनाई गई सभी फ़ाइलों के अंदर

यह कैसे करें?

+0

सर्वर दोष में इससे संबंधित एक सवाल: http://serverfault.com/q/122824/ 36 9 63 – brandizzi

उत्तर

24

यह Banthar के समाधान से थोड़ा अलग है, लेकिन यह find के संस्करणों कि -newermt का समर्थन नहीं करते के साथ काम करेंगे और यह कैसे xargs आदेश, उपयोग करने के लिए पता चलता है जो एक बहुत उपयोगी उपकरण है।

आप "निश्चित आयु" फ़ाइलों का पता लगाने के लिए find कमांड का उपयोग कर सकते हैं।

find /directory -type f -mtime -10 -mtime +5 

तो करने के लिए एक स्ट्रिंग के लिए उन फ़ाइलों को खोज:: यह सभी फ़ाइलों के बीच 5 और 10 दिन पहले संशोधित मिलेगा

find /directory -type f -mtime -10 -mtime +5 -print0 | 
    xargs -0 grep -l expression 

तुम भी -exec स्विच का उपयोग कर सकते हैं, लेकिन मैं xargs अधिक पठनीय लगता है (और यह अक्सर भी बेहतर प्रदर्शन करेगा, लेकिन संभवतः इस मामले में नहीं)।

(ध्यान दें कि -0 ध्वज इस आदेश में इस तरह के रूप में this is my filename एम्बेडेड रिक्त स्थान के साथ फाइलों पर काम करते हैं, यह बताने के लिए नहीं है।) टिप्पणी में प्रश्न के लिए

अद्यतन

जब आप find करने के लिए कई भाव प्रदान , वे एक साथ एंडेड हैं। जैसे, यदि आप के लिए पूछना:

find . -name foo -size +10k 

... find केवल फ़ाइलें हैं कि वापस आ जाएगी दोनों (क) foo नामित और (ख) 10 Kbytes से भी बड़ा। इसी तरह, आप निर्दिष्ट करते हैं:

find . -mtime -10 -mtime +5 

... find केवल फ़ाइलों को लौटा देगा कि (क) नए से 10 दिन पहले और (ख) की तुलना में 5 दिन पहले पुराने।

उदाहरण के लिए, अपने सिस्टम पर यह वर्तमान में है:

$ date 
Fri Aug 19 12:55:21 EDT 2016 

मैं निम्न फ़ाइलें हैं:

$ ls -l 
total 0 
-rw-rw-r--. 1 lars lars 0 Aug 15 00:00 file1 
-rw-rw-r--. 1 lars lars 0 Aug 10 00:00 file2 
-rw-rw-r--. 1 lars lars 0 Aug 5 00:00 file3 

अगर मैं "अधिक से अधिक 5 दिन पहले संशोधित फ़ाइलों के लिए पूछना (-mtime +5) मैं प्राप्त करें:

$ find . -mtime +5 
./file3 
./file2 

लेकिन अगर मैं "5 दिनों से अधिक समय में संशोधित फ़ाइलों के लिए पूछता हूं लेकिन 10 दिनों से भी कम आयु के लिए पूछता हूं ओ "(-mtime +5 -mtime -10), मैं मिलता है:

$ find . -mtime +5 -mtime -10 
./file2 
+0

क्या कोई बता सकता है कि निर्दिष्ट करने के लिए -mtime को दो बार एक सीमा निर्दिष्ट करने के लिए उपयोग किया जाता है? विशेष रूप से, पहली घटना के लिए नकारात्मक संख्या क्यों, और दूसरे के लिए सकारात्मक संख्या क्यों? या तो मैं इसे समझ नहीं पा रहा हूं, या यह उबंटू 14.04.3 एलटीएस पर काम नहीं कर रहा है। उस मैन पेज में चर्चा नहीं की गई है जिसे मैं देख रहा हूं। – battey

+0

@battey, मैंने आपके प्रश्न के जवाब के साथ अपना उत्तर अपडेट कर दिया है। – larsks

14

find साथ ग्रेप संयुक्त करें:

find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \; 
+1

यह '-न्यूमेट' विकल्प अनियंत्रित प्रतीत होता है - यह लिंक में दिखाई नहीं देता है और न ही मेरे मैन पेज में। हालांकि, यह अद्भुत है! आपने इसे कैसे खोजा? – brandizzi

+2

@brandizzi यह '-NewerXY' के तहत है। –

-1

find विकल्प हैं कि आप कहां पर (टाइमस्टैम्प तुलना के लिए विशिष्ट तिथियों निर्दिष्ट कर सकते हैं कम से कम अपने लैपटॉप पर संस्करण नहीं है प्रतीत नहीं होता है - वहाँ अन्य संस्करणों हो सकता है और/या अन्य टूल्स जो समान प्रदर्शन करते हैं), इसलिए आपको दिनों की संख्या का उपयोग करना होगा। तो, 2012/06/05 के रूप में, आप 9 दिनों की तुलना में नए फ़ाइलों लेकिन से अधिक उम्र के 6 दिन लगाना चाहते हैं:

find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ 
संबंधित मुद्दे