ऑटो 7 दिनों से अधिक पुरानी फ़ाइलों को हटाएं


17

मैं linux में एक पूर्ण noob हूं लेकिन मैं इसे लटका देना शुरू कर रहा हूं। मेरे पास एक उबंटू सर्वर 16.04 है जो सुरक्षा वीडियो फ़ाइलों का बैकअप लेने के लिए एक एफ़टीपी सर्वर चलाता है। फ़ाइलों जैसे फ़ोल्डर में संग्रहीत किया जाएगा: /home/securityfolder1, /home/securityfolder2, /home/securityfolder3और इतने पर।

ध्यान दें कि प्रत्येक securityfolderNएक अलग उपयोगकर्ता है।

क्योंकि मैं नहीं चाहता कि मेरी हार्ड ड्राइव पूरे समय भरी रहे, इसलिए मैं इन फ़ोल्डरों में 7 दिनों से अधिक पुरानी फाइलों को रोजाना डिलीट करना चाहता हूं।


/homeआमतौर पर प्रत्येक उपयोगकर्ता के लिए एक सबफ़ोल्डर होता है। यदि आप अपने बैकअप को अलग-अलग उपयोगकर्ताओं (वास्तव में अच्छा विचार नहीं) के रूप में संग्रहीत नहीं करना चाहते हैं, तो आपको किसी अन्य स्थान, उदाहरण /home/security/backup1और इतने पर विचार करना चाहिए ।
मेलेबियस

@Melebius आपकी टिप्पणी के लिए धन्यवाद, हर / सुरक्षा फ़ोल्डर एक अलग उपयोगकर्ता है, मैं इसका उल्लेख करना भूल गया।
जैको वैन डे विग्गार्ट

जवाबों:


28

सबसे पहले, यह कमांड किसी भी उपनिर्देशिका में 7 दिनों से अधिक पुरानी सभी फाइलों को ढूंढ और हटा देगा /homeजिनके नाम से शुरू होता है securityuser:

find /home/securityuser* -mtime +6 -type f -delete

आपको जरूरत है -mtime +6और नहीं +7क्योंकि -mtime24 घंटों की अवधि मायने रखती है। के रूप में समझाया गया -atimeहै man find( -mtimeउसी तरह से काम करता है):

   -atime n
          File  was  last  accessed n*24 hours ago.  When find figures out
          how many 24-hour periods ago the file  was  last  accessed,  any
          fractional part is ignored, so to match -atime +1, a file has to
          have been accessed at least two days ago.

इसलिए, 7 या अधिक दिन पहले संशोधित की गई फ़ाइल को खोजने के लिए, आपको उन फ़ाइलों को खोजने की आवश्यकता है, जिन्हें 6 दिन से अधिक समय पहले संशोधित किया गया था -mtime +6

अगले चरण में इस कमांड को दिन में एक बार चलाना है। चूंकि प्रत्येक securityuserNएक अलग उपयोगकर्ता है (आप उस सेटअप को पुनर्विचार करना चाह सकते हैं, यह सब कुछ अधिक जटिल बनाता है), इसे रूट के रूप में चलाया जाना चाहिए। तो, संपादित करें /etc/crontab:

sudo nano /etc/crontab

और इस लाइन को जोड़ें:

@daily root find /home/securityuser* -mtime +6 -type f -delete

वह findदिन में एक बार कमांड चलाएगा और फाइलों को हटा देगा।


+1) नाखून को थोड़ा गहरा और शायद मेपलियस के सुझाव को ओपी में दोहराते हुए, कि find '/home/securityuser/*' -mtime +6 -type f -delete(उपयोगकर्ता निर्माण में सभी उचित और उचित बदलावों के साथ) आमतौर पर एक बेहतर विचार हो सकता है find '/home/securityuser*' -mtime +6 -type f -delete(पथ में कोई स्लैश नहीं) ...?
Cbhihe

@Cbhihe नहीं, लक्ष्य निर्देशिकाओं को कहा जाता है /home/securityuserN, इसलिए स्लैश के बिना, वे नहीं मिलेंगे।
टेर्डन

हाँ, देखा कि; ओप्पल की पहली टिप्पणी के आधार पर, ओपी की ओर से यह अच्छा व्यवहार नहीं था (प्रत्येक सुरक्षा वीडियो, आदि के लिए एक अलग उपयोगकर्ता बना ...), हालांकि ओपी के ऐसा करने के उनके कारण हो सकते हैं। अगर कुछ भी मेरी टिप्पणी लंगड़ा था, yr अच्छे और पूर्ण उत्तर की आलोचना नहीं।
Cbhihe

1
+1 मुझसे। जैसा कि मैंने आरएचईएल पर यह चल रहा था, बस एक विवरण नोट करें: वाइल्डकार्ड पथ पर काम नहीं करता था। मुझे इसे लगाना था -name:find /home/ -name 'securityuser*' -mtime +6 -type f -delete
स्टेलिओस एडमांटिडिस 10

1
@SteliosAdamantidis ओह वाह, मैं पूरी तरह से याद किया! हां, जब से मैंने उद्धृत किया था मूल संस्करण काम नहीं करेगा 'securityuser*'। वाइल्डकार्ड को शेल द्वारा विस्तारित किया जाना चाहिए, द्वारा नहीं find, इसलिए यह होना चाहिए था securityuser*(कोई उद्धरण नहीं)। अद्यतन उत्तर देखें। यह इंगित करने के लिए धन्यवाद, स्टेलियो, मैं विश्वास नहीं कर सकता कि पहले किसी ने भी गौर नहीं किया! ति वलकास!
टेराडॉन

4

मेरी जानकारी के अनुसार:

findइस तरह से कोशिश करें:

find ./dirc/* -mtime +6 -type f -delete

./dirc/* : is your directory (Path)
-mtime +6 : modified more than 6 days ago (therefore, at least 7 days ago)
-type f : only files
-delete : no surprise. Remove it to test before like rm

आपके उत्तर के लिए धन्यवाद। क्या ./dirc/* का अर्थ है :/home/securityfolder1/* या यह गलत है?
जैको वैन डे विग्गार्ट

मैंने अभी-अभी अपने वर्चुअलबॉक्स में इसे आज़माया है find /home/jacco/ -mtime +1 -type f -deleteऔर यह काम करने लगता है। मैं इसे कैसे स्वचालित कर सकता हूं?
जैको वैन डे विजजार्ट

एक स्क्रिप्ट फ़ाइल बनाएं और स्क्रिप्ट का उपयोग करके इस कमांड को आगें करें यदि यह स्टार्टअप प्रक्रिया पर आपकी स्क्रिप्ट फ़ाइल को चलाने से काम करती है।
मौलिक पटेल

मैं सुपरनोबो के समान हूँ, यहाँ स्क्रिप्ट बनाने के हिस्से को क्यूज़ किया गया है, क्या इसका मतलब फ़ाइल है #!/bin/bashऔर इसके तहत कोड है? या मैं वास्तव में मूर्ख हूँ यहाँ?
जैको वैन डे विजजार्ट

2
@Melebius नहीं, थाह पथ को उद्धृत नहीं किया जाना चाहिए, खासकर जब ग्लोब वर्ण हों। आप चाहते हैं कि इसे शेल द्वारा विस्तारित किया जाए और कोटेशन को अवरुद्ध किया जाएगा। उदाहरण के लिए कोशिश करें find '/u*' -name local:। यह ऐसे निर्देश हैं जैसे -name "foo*"कि ग्लोब पात्रों को शामिल करते हुए उद्धृत किया जाना चाहिए।
टेराडॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.