2012-11-21 8 views
82

में खोल स्क्रिप्ट का उपयोग करके 10 दिनों से पुरानी फ़ाइलों को हटाएं मैं शैल स्क्रिप्ट के लिए नया हूं, क्या कोई मदद कर सकता है? मैं वर्तमान तिथि से किसी फ़ोल्डर में स्क्रिप्ट को 10 दिनों तक हटाना चाहता हूं।यूनिक्स

2012.11.21.09_33_52.script 
2012.11.21.09_33_56.script 
2012.11.21.09_33_59.script 

स्क्रिप्ट Crontab साथ हर 10 दिन में चलाया जाएगा, यही कारण है कि मैं आज की तारीख की जरूरत है: स्क्रिप्ट की तरह दिखता है।

+0

आप ज किया 'मैन डेट' पर एक नजर डालें? – Jens

+3

क्या आपको फ़ाइल नाम या फ़ाइल के संशोधन समय के आधार पर हटाने की आवश्यकता है? – Barmar

+0

मुझे एक पूरी स्क्रिप्ट चाहिए :) मुझे एक एक्सपैमल मिल गया है लेकिन मुझे यकीन नहीं है कि यह इसके लिए अच्छा है: ढूंढें/होम/स्क्रिप्ट /। -नाम '* .script' -mtime +10 -exec rm -rf '{}' \; – Steve88

उत्तर

283

find काम के इस प्रकार के लिए आम उपकरण है:

find ./my_dir -mtime +10 -type f -delete 

स्पष्टीकरण

  • ./my_dir आपकी निर्देशिका (डब्ल्यू बदलें ith अपनी खुद की)
  • -mtime +10 10 दिनों
  • -type f से अधिक उम्र के केवल
  • -delete कोई आश्चर्य की बात फ़ाइलें। पूरे आदेश

को क्रियान्वित करने से पहले अपने find फिल्टर का परीक्षण और देखभाल कि ./my_dir बुरा आश्चर्य से बचने के लिए मौजूद है करने के लिए इसे निकालें!

+0

'इन्हें हटाने के लिए /home/scripts/*.script -mtime +10 प्रकार f -delete' ठीक होगा? 2012.11.21.09_33_52.script 2012.11.21.09_33_56.script 2012.11.21.09_33_59.script – Steve88

+0

यह संशोधन की तारीख से निर्भर करता है क्या '-l' प्रदर्शित करता है रास की तरह। क्या तारीख 'ls -l' जैसा ही है?लेकिन एक साधारण परीक्षण आपको बताएगा =) –

+0

हाँ यह स्क्रिप्ट – Steve88

4

आप फ़ाइल डेटा के माध्यम से काम कर खर्च कर सकते हैं, तो आप क्या कर सकते हैं

find -mmin +14400 -delete 
+1

[अज्ञात संपादक] के लिए (http://stackoverflow.com/review/suggested-edits/5805137): 'find' में कौन सा संस्करण है' -rm-rf' विकल्प है? – glglgl

11

बस पुरानी फ़ाइलों

#!/bin/bash 

timestamp=$(date +%Y%m%d_%H%M%S) 
path="/data/backuplog" 
filename=log_back_$timestamp.txt 
log=$path/$filename 

find $path -name "*.txt" -type f -mtime +7 -print -delete >> $log 

echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> $log 

START_TIME=$(date +%s) 

... code for backup ...or any other operation .... 


END_TIME=$(date +%s) 

ELAPSED_TIME=$(expr $END_TIME - $START_TIME) 


echo "Backup :: Script End -- $(date +%Y%m%d_%H%M)" >> $log 
echo "Elapsed Time :: $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) " >> $log 

sputnick के जवाब पर कोड का निर्माण को हटाने के लिए खोल स्क्रिप्ट को spicing और कुछ और बातें कहते हैं।

  • लॉग एक टाइमस्टैम्प
  • लॉग फ़ोल्डर निर्दिष्ट
  • खोजने के साथ नामित किया गया फ़ाइलें (केवल अधिक उम्र
  • लॉग फाइल 7 दिन नष्ट हो जाती हैं लॉग फ़ोल्डर में * .txt फ़ाइलों के लिए लग रहा है यह सोचते हैं कि यह एक के लिए है बैकअप लॉग)
  • नोट प्रारंभ/समाप्ति समय
  • बीता हुआ समय की गणना करता है ...
+0

हाय @ मार्कोज़ेन। मेरे पास 2 'ढूंढें' और 'हटाएं' आदेश समान '$ लॉग' पर लिख रहे हैं। यह पहले दो जिनमें से कोई सामग्री नहीं है और फाइलों की सूची वाली अंतिम फ़ाइल वाली तीन लॉग फ़ाइलों को क्यों हटाया जाता है। मैं क्या कर सकता हूं ताकि खोज और हटाएं कमांड एकाधिक फाइलें उत्पन्न न करे? –

+0

@FokwaBest - क्या आप anoher लॉग फ़ाइल बना सकते हैं? टाइमस्टैम्प के बीसीओएस? क्या आप उपर्युक्त कोड का पूरी तरह से उपयोग कर रहे हैं? क्या आप जांचने के लिए पेस्टबिन कर सकते हैं? – MarcoZen

+0

हाय @ मार्कोज़ेन, मुझे '_% एच% एम% एस' को हटाना पड़ा। छोटी फ़ाइलों के लिए, केवल एक लॉग फ़ाइल उत्पन्न हुई थी, लेकिन जब फ़ाइलों को हटाने की संख्या का आकार बड़ा था, तो विभिन्न '_% एच% एम% एस' के साथ एकाधिक लॉग फ़ाइल उत्पन्न हुई थी। इस भाग को हटाने के बाद, सब कुछ एक फाइल में लिखा जाता है। –