निर्देशिका संरचना को अक्षुण्ण रखते हुए मेरे सिस्टम को एक निश्चित समय से पुरानी एक निश्चित निर्देशिका में सभी फ़ाइलों को हटाने के लिए कैसे करें?


12

मेरे पास मेरी मशीन पर एक निर्देशिका है, इसे अपनी तरह की tmpनिर्देशिका के रूप में सोचें , लेकिन यह मेरी ~निर्देशिका में है। और मैं इसे बनाना चाहता हूं ताकि हर 3 घंटे में मेरा सिस्टम सभी फाइलों को डिलीट कर दे (हालांकि किसी भी डायरेक्टरी स्ट्रक्चर को बरकरार रखते हुए, लेकिन फिर भी डाइरेक्टरी के सभी लेवल की सभी फाइल्स को रिक्रिएसिवली डिलीट कर देता है) उस डायरेक्टरी को जो एक दिन से पुरानी है।

मैं Ubuntu गनोम 15.10 को गनोम 3.18 के साथ चला रहा हूं, क्या यह किया जा सकता है? और यदि हां, तो कैसे? मैं चाहूंगा कि यह पूरी तरह से स्वचालित हो, जिसमें किसी भी उपयोगकर्ता के साथ बातचीत की आवश्यकता न हो। लॉगिन करते समय यह स्वचालित रूप से शुरू हो जाना चाहिए, इसलिए मुझे हर स्टार्टअप पर कुछ चलाने की आवश्यकता नहीं होनी चाहिए।

जवाबों:


21

का उपयोग कर find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp निर्देशिका को पुनरावर्ती रूप से खोजा जाना है, तदनुसार इसे बदलें

  • -type f केवल फ़ाइलों के लिए दिखेगा

  • -mtime +0 अगर यह एक दिन या उससे अधिक समय पहले संशोधित किया गया था तो एक फाइल से मेल खाएगा

  • -delete बस मिलान की गई फ़ाइल को हटा देगा

यहाँ पकड़ है -mtime +0, सबसे का उपयोग करने के बारे में सोच सकते हैं, -mtime +1लेकिन findदिनों की गणना करते समय किसी भी आंशिक समय की अनदेखी करेगा। तो, -mtime +1एक फ़ाइल से मेल खाएगा यदि अंतिम संशोधन कम से कम 2 दिन पहले किया गया था।

उद्धरण man find, के रूप -mtimeमें एक ही समय सम्मेलन है -atime:

-टाइम एन

फ़ाइल को अंतिम बार n * 24 घंटे पहले एक्सेस किया गया था। यह पता लगाने के लिए कि फ़ाइल को पिछली बार कितने घंटे पहले एक्सेस किया गया था, किसी भी आंशिक हिस्से को अनदेखा किया गया है, इसलिए -atime +1 से मिलान करने के लिए, एक फ़ाइल को कम से कम दो दिन पहले एक्सेस किया जाना चाहिए।

यह भी ध्यान दें कि यदि आप सटीक चाहते हैं, तो आपको मिनटों में समय इंगित करने के -mminविकल्प को देखना चाहिए find

3 घंटे के बाद इसे समय-समय पर चलाने के लिए, आप एक cronप्रविष्टि जोड़ सकते हैं ।

चलाएं crontab -eऔर जोड़ें:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

zshफ़ाइलों को हटाने के लिए उपयोग करना :

rm ~/tmp/**/*(.-m+0)

इसमें जोड़ना cron:

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'

6

आपको 1 दिन से अधिक पुरानी सभी फ़ाइलों /home/username/directoryऔर इसके साथ सभी निर्देशिकाओं को हटाने में सक्षम होना चाहिए :

find /home/username/directory -type f -mtime +1 -delete

और हर तीन घंटे में उस कमांड को शेड्यूल करने के लिए इसे क्रोन जॉब के रूप में सेट करें:

crontab -e

तो अंदर crontab:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

जो हर तीन घंटे पर आपका आदेश चलाता है (यानी मिनट 0), इसलिए 3:00 am, 6:00 am आदि।

उन पर cronऔर crontab manpagesअधिक जानकारी के लिए जाएं ।


4
यह उत्तर वास्तव में गलत है, कृपया अन्य उत्तर देखें ।

4
जैसा कि यह उत्तर गलत है , और वास्तव में अन्य उत्तर से अधिक कुछ नहीं कहता है, कृपया या तो अपने उत्तर में सुधार करें ताकि यह अन्य उत्तर की तुलना में सही और बेहतर हो, या इसे हटा दें।

5
@ParanoidPanda मैं समझता हूं कि आप उच्च-गुणवत्ता वाले उत्तर चाहते हैं, लेकिन अनिवार्य रूप से एक ही बात पर दो बार टिप्पणी करना अनावश्यक है और इसे आक्रामक रूप से देखा जा सकता है, खासकर एक नए उपयोगकर्ता के लिए।
आरपीअवेसन

2
@RPiAwesomeness: ठीक है, मैंने दूसरी बार टिप्पणी की क्योंकि मैं अपनी पहली टिप्पणी को संपादित करने के लिए समय से बाहर चला गया था, और मैं यह भी कहना चाहता था कि उन्हें अपना उत्तर हटाना चाहिए, जो कि शायद मेरी पहली टिप्पणी से कुछ समझ में नहीं आया, हालांकि मैं उन्हें हमले के तहत महसूस नहीं करना चाहता था और जैसे मैं सिर्फ यह कह रहा था कि उन्होंने गलत जवाब दिया था और अब इसे हटाना चाहिए, इसलिए मैंने सुधार के बारे में थोड़ा जोड़ा। लेकिन मैं देख सकता हूं कि इसे कैसे गलत तरीके से लिया जा सकता है, इसलिए मैं आपको याद रखने के लिए कहता हूं: एक पांडा केवल आक्रामक हो जाता है जब आप उसके बांस को दूर ले जाते हैं। ;-)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.