मैं उबंटू ओएस पर हूं। मैं सभी लॉग फ़ाइलों के अंदर एक शब्द (XYZ कहता हूं) grep करना चाहता हूं जो 28-मई -2012 से 30-मई -2012 की तिथि सीमा के भीतर बनाए गए हैं।Grep तिथि सीमा के भीतर बनाई गई सभी फ़ाइलों के अंदर
यह कैसे करें?
मैं उबंटू ओएस पर हूं। मैं सभी लॉग फ़ाइलों के अंदर एक शब्द (XYZ कहता हूं) grep करना चाहता हूं जो 28-मई -2012 से 30-मई -2012 की तिथि सीमा के भीतर बनाए गए हैं।Grep तिथि सीमा के भीतर बनाई गई सभी फ़ाइलों के अंदर
यह कैसे करें?
यह 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
क्या कोई बता सकता है कि निर्दिष्ट करने के लिए -mtime को दो बार एक सीमा निर्दिष्ट करने के लिए उपयोग किया जाता है? विशेष रूप से, पहली घटना के लिए नकारात्मक संख्या क्यों, और दूसरे के लिए सकारात्मक संख्या क्यों? या तो मैं इसे समझ नहीं पा रहा हूं, या यह उबंटू 14.04.3 एलटीएस पर काम नहीं कर रहा है। उस मैन पेज में चर्चा नहीं की गई है जिसे मैं देख रहा हूं। – battey
@battey, मैंने आपके प्रश्न के जवाब के साथ अपना उत्तर अपडेट कर दिया है। – larsks
find साथ ग्रेप संयुक्त करें:
find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \;
यह '-न्यूमेट' विकल्प अनियंत्रित प्रतीत होता है - यह लिंक में दिखाई नहीं देता है और न ही मेरे मैन पेज में। हालांकि, यह अद्भुत है! आपने इसे कैसे खोजा? – brandizzi
@brandizzi यह '-NewerXY' के तहत है। –
find
विकल्प हैं कि आप कहां पर (टाइमस्टैम्प तुलना के लिए विशिष्ट तिथियों निर्दिष्ट कर सकते हैं कम से कम अपने लैपटॉप पर संस्करण नहीं है प्रतीत नहीं होता है - वहाँ अन्य संस्करणों हो सकता है और/या अन्य टूल्स जो समान प्रदर्शन करते हैं), इसलिए आपको दिनों की संख्या का उपयोग करना होगा। तो, 2012/06/05 के रूप में, आप 9 दिनों की तुलना में नए फ़ाइलों लेकिन से अधिक उम्र के 6 दिन लगाना चाहते हैं:
find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ
सर्वर दोष में इससे संबंधित एक सवाल: http://serverfault.com/q/122824/ 36 9 63 – brandizzi