यूनिक्स में विशिष्ट दिनों की तुलना में पुरानी फ़ाइलों को खोजने और हटाने के लिए कैसे?


38

मुझे इसमें 7 फ़ोल्डर्स के साथ लॉग के लिए एक फ़ोल्डर मिला है। उन सात फ़ोल्डरों में भी सबफ़ोल्डर हैं और उन सबफ़ोल्डर्स में सबफ़ोल्डर्स भी हैं। मैं सबफ़ोल्डर सहित सभी फ़ोल्डरों में 15 दिनों से अधिक पुरानी सभी फ़ाइलों को हटाना चाहते हैं, जिसमें फ़ोल्डर स्ट्रक्चर को स्पर्श किए बिना, जिसका अर्थ है केवल फाइलें।

mahesh@inl00720:/var/dtpdev/tmp/ > ls
A1  A2  A3  A4  A5  A6  A7

mahesh@inl00720:/var/dtpdev/tmp/A1/ > ls
B1 B2 B3 B4 file1.txt file2.csv

जवाबों:


54

आप कह कर शुरू कर सकते थे find /var/dtpdev/tmp/ -type f -mtime +15। यह 15 दिनों से अधिक पुरानी सभी फ़ाइलों को ढूंढेगा और उनके नाम प्रिंट करेगा। वैकल्पिक रूप से, आप -printकमांड के अंत में निर्दिष्ट कर सकते हैं , लेकिन यह डिफ़ॉल्ट क्रिया है। उपरोक्त कमांड को पहले चलाने की सलाह दी जाती है, यह देखने के लिए कि कौन सी फाइलें चुनी गई हैं।

आपके द्वारा सत्यापित करने के बाद कि findकमांड उन फ़ाइलों को सूचीबद्ध कर रही है, जिन्हें आप हटाना चाहते हैं (और कोई नहीं), आप फ़ाइलों को हटाने के लिए "एक्शन" जोड़ सकते हैं। यह करने के लिए विशिष्ट क्रियाएं हैं:

  1. -exec rm -f {} \;(या, समतुल्य -exec rm -f {} ';') ,
    यह rm -fप्रत्येक फ़ाइल पर चलेगा ; जैसे,

    rm -f /var/dtpdev/tmp/A1/B1; rm -f /var/dtpdev/tmp/A1/B2; rm -f /var/dtpdev/tmp/A1/B3; …
    
  2. -exec rm -f {} +
    यह rm -fएक साथ कई फाइलों पर चलेगा ; जैसे,

    rm -f /var/dtpdev/tmp/A1/B1 /var/dtpdev/tmp/A1/B2 /var/dtpdev/tmp/A1/B3 …
    

    इसलिए यह विकल्प 1 से थोड़ा तेज हो सकता है ( rm -fयदि आपके पास हजारों फाइलें हैं तो इसे कुछ समय चलाने की आवश्यकता हो सकती है ।)

  3. -delete
    यह findफ़ाइलों को चलाने के बिना खुद को हटाने के लिए कहता है rm। यह -execवेरिएंट की तुलना में असीम रूप से तेज हो सकता है , लेकिन यह सभी प्रणालियों पर काम नहीं करेगा।

इसलिए, यदि आप विकल्प 2 का उपयोग करते हैं, तो पूरी कमांड होगी:

find /var/dtpdev/tmp/ -type f -mtime +15 -exec rm -f {} +

-डेलीट का उपयोग करना अधिक सरल है (वाक्य रचना और कोई भी बच्चा हटाने की प्रक्रिया नहीं करता है) लेकिन सभी प्रणालियों पर काम नहीं कर सकता है। rm -f {} + सबसे अच्छा है, यह बैचों में फ़ाइलों को हटा देगा यदि एक कमांड-लाइन के लिए बहुत अधिक फाइलें होने के लिए पर्याप्त फाइलें हैं। rm -f {} ';) यदि कमांड एक पंक्ति के लिए बहुत अधिक होने के लिए पर्याप्त फाइलें हैं, तो कमांड को बहुत लंबी त्रुटि देगा।
गौइथे

-1

या लूप से करें:

for x in $(find /var/dtpdev/tmp/ -type f -mtime +15); do rm "$x"; done

यह उन में रिक्त स्थान वाली फ़ाइलों के साथ काम नहीं करेगा।
द्रविण स्लोअन

आप इसके बजाय थोड़ी देर के लूप का उपयोग कर सकते हैं जो रिक्त स्थान के साथ फ़ाइलों का ध्यान रखना चाहिए। / var / dtpdev / tmp / -type f -mtime +15 | पढ़ने के दौरान एक्स; rm "$ x" करें; किया
डेविड ओकवि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.