उन फ़ाइलों को खोजें जो संख्या के साथ समाप्त होती हैं


10

Im कुछ बैकअप स्क्रिप्ट बनाने की कोशिश कर रहा है क्योंकि लॉग फाइलें बड़ी और बड़ी हो जाती हैं। मेरे पास वर्तमान फ़ाइल को कॉपी कर रहा है, (उदाहरण के लिए secureफ़ाइल में /var/log/) और उस फ़ाइल से सामग्री को हटा दें। लेकिन वहाँ की तरह नाम के साथ कुछ फाइलें हैं: secure.1, secure.2और यह सब मुझे पसंद है उनकी गणना, और यदि संख्या में बड़ा है तो 2उन सब को संग्रह करने के लिए। मुझे इस फ़ाइलों को खोजने या उन्हें गिनने की विधि नहीं मिल रही है। पहले लगता है कि मेरे पास आया था:

find /var/log/ -name *.1 | wc -l

और यह हमेशा प्रिंट रहेगा 1क्योंकि एक फाइल है secure.1। मैं लूप के लिए कैसे गणना कर सकता हूं जहां मैं कई तरह की संख्याओं को निर्दिष्ट कर सकता हूं {1..5}। क्या इस फ़ाइलों को अलग करने और उन्हें एक बनाने के लिए एक तरीका है और उन्हें बैकअप या हटाना या कभी भी ... या सबसे पहले मैं यह सब कैसे पा सकता हूं जो संख्या के साथ समाप्त होता है।


1
क्या आप वाइल्डकार्ड उद्धृत करना भूल गए? find /var/log/ -name '*.1' ...
मूरू

1
मुझे लगता है कि logrotateआपके उद्देश्य के लिए आपकी जांच होनी चाहिए ।
कोस्टा

जवाबों:


15

सरल के साथ -name:

find /var/log -name '*.[2-9]'

या किसी भी अंक के लिए:

find /var/log -name '*.[[:digit:]]'

या यदि अंक के बाद अन्य वर्ण संभव हैं:

find /var/log -name '*.[2-9]*'

उन लोगों को कैसे खोजें, जिनके नाम में केवल अंक हैं?
लेटफायरफ्लाइस्लाविव

3

उन फिल्नामों को खोजने के लिए जो एक नंबर से लेकर .[1 से 5] तक होते हैं।

find /var/log/ -type f -regextype sed -regex ".*\.[1-5]$"

1

सिर्फ क्यों नहीं ...

for log in /var/log/*.[1-5]
do whatever to "$log"
done

findजहाँ तक मैं बता सकता हूँ - आपको इसकी आवश्यकता नहीं है - शेल उसी ग्लब्स का उपयोग करता है जो इसमें होता है -name। और अगर सभी फाइलें एक ही डायरेक्टरी में हैं ... बेशक, अगर वहाँ उपनिर्देशिकाएं हैं जो आप में रुचि रखते हैं तो findफायदेमंद हो सकता है - शेल में पेड़ चलना सिरदर्द हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.