3 दिनों से पुरानी फ़ाइलों को हटाने के लिए क्रॉन का काम


21

मुझे 3 दिनों से पुरानी फाइलों को 3 अलग-अलग निर्देशिकाओं में क्रोन जॉब से हटाने की आवश्यकता है। (इन 3 निर्देशिका एक मूल निर्देशिका के बच्चे हैं /a/b/c/1और /a/b/c/2और /a/b/c/3इस crontab में एक लाइन के साथ किया जा सकता है)?

जवाबों:


26

यह काफी आसान है (हालांकि ध्यान दें कि यह 3 दिन पहले एक संशोधन समय से अधिक है क्योंकि एक निर्माण समय केवल विशेष उपकरणों के साथ कुछ फाइल सिस्टम पर उपलब्ध है):

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete

निकालें #से पहले -deleteएक बार आप यकीन है कि यह फाइल को आप निकालना चाहते हैं पाने के है।

यह क्रॉन से दिखाने के लिए, मैं शायद सिर्फ एक निष्पादन स्क्रिप्ट (एक कुटिया जोड़ने - बन जाएगा #!bin/shफ़ाइल के शीर्ष लाइन के लिए और के साथ निष्पादन योग्य बनाने के chmod a+x), तो एक उचित में रख cronतरह निर्देशिका /etc/cron.dailyया /etc/cron.weekly। बशर्ते कि आपको अधिक विशिष्ट अनुसूची की आवश्यकता न हो और ये निर्देशिका आपके डिस्ट्रो पर मौजूद हो।

अद्यतन करें

जैसा कि नीचे उल्लेख किया गया है, -deleteविकल्प findबहुत पोर्टेबल नहीं है। एक POSIX संगत दृष्टिकोण होगा:

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +

#जब आप सुनिश्चित करें कि आपके पास सही फ़ाइलें हैं , तो फिर से निकालें ।

Update2

स्टीफन चेज़लस से नीचे टिप्पणी करने के लिए :

ध्यान दें कि -exec rm {} +दौड़ की स्थिति कमजोरियां हैं -delete(जहां उपलब्ध है) नहीं है। इसलिए इसका उपयोग उन निर्देशिकाओं पर न करें जो दूसरों द्वारा लिखी जा सकती हैं। कुछ को यह भी पता चलता है -execdirकि उन कमजोरियों के खिलाफ शमन होता है।


धन्यवाद! क्या अभिभावक निर्देशिका और फिर बाल निर्देशिकाओं को निर्दिष्ट करने का कोई तरीका है ताकि /a/b/c/हर विकल्प के लिए निर्दिष्ट न होना पड़े?
किंगकांग फॉग

निश्चित रूप से, एक POSIX शेल में आप कर सकते हैं /a/b/c/[12], लेकिन यह केवल तभी उपयुक्त है जब उपनिर्देशिका में एकल अक्षर नाम हों। में bashआप कर सकते हैं /a/b/c/{1,2}। निश्चित रूप से एक स्क्रिप्ट के लिए बैंग लाइन होनी चाहिए #!/bin/bashया यदि आप कॉन्टैब का उपयोग कर रहे हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि इसे उपयोग करने के लिए कॉन्फ़िगर किया गया है bash(यदि यह नहीं है तो मैं वास्तव में इसे बदलने की सलाह नहीं देता)।
ग्रीम

2
ब्रेस विस्तार एक csh फीचर है और इसे ksh, bash, zsh और फिश द्वारा भी सपोर्ट किया जाता है, ताकि आपके पास शेल्स की एक विस्तृत पसंद हो। ksh, bashऔर zshउनके ग्लोब में वैकल्पिक संचालक भी हैं। ध्यान दें कि -exec rm {} +दौड़ की स्थिति कमजोरियां हैं -delete(जहां उपलब्ध है) नहीं है। इसलिए इसका उपयोग उन निर्देशिकाओं पर न करें जो दूसरों द्वारा लिखी जा सकती हैं। कुछ को यह भी पता चलता है -execdirकि उन कमजोरियों के खिलाफ शमन होता है।
स्टीफन चेज़लस

क्या rm -fचुपचाप त्रुटियों को नहीं संभालता है, जिससे किसी भी संभावित दौड़ की स्थिति से निपटना है -exec?
एक्यूमेनस


9

आप का उपयोग करना बेहतर होगा tmpwatch

tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.

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