मुझे 3 दिनों से पुरानी फाइलों को 3 अलग-अलग निर्देशिकाओं में क्रोन जॉब से हटाने की आवश्यकता है। (इन 3 निर्देशिका एक मूल निर्देशिका के बच्चे हैं /a/b/c/1और /a/b/c/2और /a/b/c/3इस crontab में एक लाइन के साथ किया जा सकता है)?
मुझे 3 दिनों से पुरानी फाइलों को 3 अलग-अलग निर्देशिकाओं में क्रोन जॉब से हटाने की आवश्यकता है। (इन 3 निर्देशिका एक मूल निर्देशिका के बच्चे हैं /a/b/c/1और /a/b/c/2और /a/b/c/3इस crontab में एक लाइन के साथ किया जा सकता है)?
जवाबों:
यह काफी आसान है (हालांकि ध्यान दें कि यह 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 {} +
#जब आप सुनिश्चित करें कि आपके पास सही फ़ाइलें हैं , तो फिर से निकालें ।
स्टीफन चेज़लस से नीचे टिप्पणी करने के लिए :
ध्यान दें कि
-exec rm {} +दौड़ की स्थिति कमजोरियां हैं-delete(जहां उपलब्ध है) नहीं है। इसलिए इसका उपयोग उन निर्देशिकाओं पर न करें जो दूसरों द्वारा लिखी जा सकती हैं। कुछ को यह भी पता चलता है-execdirकि उन कमजोरियों के खिलाफ शमन होता है।
/a/b/c/[12], लेकिन यह केवल तभी उपयुक्त है जब उपनिर्देशिका में एकल अक्षर नाम हों। में bashआप कर सकते हैं /a/b/c/{1,2}। निश्चित रूप से एक स्क्रिप्ट के लिए बैंग लाइन होनी चाहिए #!/bin/bashया यदि आप कॉन्टैब का उपयोग कर रहे हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि इसे उपयोग करने के लिए कॉन्फ़िगर किया गया है bash(यदि यह नहीं है तो मैं वास्तव में इसे बदलने की सलाह नहीं देता)।
ksh, bashऔर zshउनके ग्लोब में वैकल्पिक संचालक भी हैं। ध्यान दें कि -exec rm {} +दौड़ की स्थिति कमजोरियां हैं -delete(जहां उपलब्ध है) नहीं है। इसलिए इसका उपयोग उन निर्देशिकाओं पर न करें जो दूसरों द्वारा लिखी जा सकती हैं। कुछ को यह भी पता चलता है -execdirकि उन कमजोरियों के खिलाफ शमन होता है।
rm -fचुपचाप त्रुटियों को नहीं संभालता है, जिससे किसी भी संभावित दौड़ की स्थिति से निपटना है -exec?
आप का उपयोग करना बेहतर होगा 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.
tmpwatch को दिया गया है tmpreaper , जो (कम से कम डेबियन पर) लगता है कि यह प्रतिस्थापन है।
/a/b/c/हर विकल्प के लिए निर्दिष्ट न होना पड़े?