मुझे 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/
हर विकल्प के लिए निर्दिष्ट न होना पड़े?