2011-05-05 28 views
16

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

find /myDir -mtime 7 -exec rm -rf {} \; 

हालांकि यह भी मूल निर्देशिका mydir, है जो मैं नहीं चाहता हटाता कोशिश की है। मैंने भी कोशिश की,

find /myDir -type f -type d -mtime 7 -delete 

जो कुछ भी करने के लिए दिखाई नहीं दिया। मैंने भी कोशिश की,

fnd /myDir -type d -delete 

जिसने मुझे आवश्यकतानुसार मूल निर्देशिका के अलावा हटा दिया। हालांकि, एक चेतावनी संदेश पढ़ने,

रिश्तेदार पथ संभवतः सुरक्षित नहीं

आया करता है, तो किसी को भी मेरी स्क्रिप्ट ठीक कर सकते हैं इतना है कि यह सुरक्षित रूप से फ़ोल्डर में सभी उप निर्देशिकाओं को हटा देता है मैं इसकी सराहना करेंगे।

बहुत धन्यवाद। =)

अद्यतन: मैं निम्नलिखित के लिए जाने का फैसला किया,

find /myDir -mindepth 1 -mtime 7 -delete 

मैं क्या सभी जो जवाब दिया से सीखा के आधार पर। फिर, आप सभी को बहुत धन्यवाद।

+0

जैसा कि एक जवाब में बताया गया है, आपका अंतिम आदेश शायद 'ढूंढें/myDir -indindepth 1 -mtime 7 -delete' होना चाहिए। '7' के बजाय' + 7' नोट करें। पूर्व 7 दिनों से अधिक पुराना सबकुछ हटा देता है और बाद में सबकुछ ठीक 7 दिनों का होता है। – jkukul

उत्तर

12

प्रयास करें:

find /myDir -mindepth 1 -mtime 7 -exec rm -rf {} \; 
+2

यह काम करता है हालांकि निष्पादन पर मुझे एक संदेश दिया गया था जिसमें प्रत्येक फ़ाइल/डायर के लिए 'ऐसी कोई फ़ाइल या निर्देशिका' नहीं है। आश्चर्य है कि यह पूरी तरह से सामान्य है या नहीं? बहुत धन्यवाद। दिमागी स्विच बहुत उपयोगी है और मुझे यह भी पता नहीं था कि यह अस्तित्व में है! – infmz

+0

मैंने -exec आरएम के बजाय -delete का उपयोग कर इसे थोड़ा बदल दिया। मुझे इस तरह से कोई चेतावनी/त्रुटियां नहीं मिलीं। क्या आप इसके बारे में एक अच्छा तरीका मानते हैं? – infmz

+0

@infmz: मैं -exec का एक बड़ा प्रशंसक नहीं हूं क्योंकि यह प्रत्येक फ़ाइल के लिए एक प्रक्रिया उत्पन्न करता है, जो कि अगर आप बड़ी संख्या में फाइलों से मेल खाते हैं तो यह घृणास्पद है, इसलिए मुझे यकीन नहीं है कि आपको त्रुटि क्यों मिलती है। मुझे लगता है कि उस कारण के लिए -delete लागू किया गया था। fwiw मैं परिणाम xargs -l2000 आरएम-आरएफ के लिए पाइप किया होगा। – linuts

6

के बारे में
cd myDir/ ; find . -type d -delete 

मानते हुए कि आपके myDir मूल निर्देशिका से चलने वाले क्या।

आप की गारंटी लेते हैं mydir मौजूद है, तो यह सुरक्षित है:

cd myDir/ && find . -type d -delete 
+0

@infmz: आपका स्वागत है। अगर आपको लगता है कि यह आपके लिए एक अच्छा जवाब है, तो इसे उत्तर के रूप में स्वीकार करें (जिस तरह से स्टैक ओवरफ्लो काम करता है) – MarcoS

+0

अनुस्मारक के लिए धन्यवाद, मुझे पता है कि यह कैसे काम करता है। =) जब मैं सबसे अच्छा समाधान चुनता हूं तो मैं करूँगा। – infmz

+0

क्या होगा यदि myDir अब मौजूद नहीं है? सीडी विफल रहता है और वर्तमान निर्देशिका से शुरू हटाना पाता है .. सुरक्षित नहीं है? –

6

find /myDir -mindepth 1 -mtime 7 -delete

शायद

find /myDir -mindepth 1 -mtime +7 -delete

(या शायद mtime +6) होना चाहिए। + का मतलब है कि 7 दिनों की बजाय 7 दिन या उससे अधिक उम्र की चीजें हैं।