7 दिनों से अधिक पुरानी फ़ाइलों को हटाना


79

मैं 7 दिनों से अधिक पुरानी सभी फ़ाइलों को हटाने के लिए कमांड लिखता हूं, लेकिन यह काम नहीं करता है:

find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;

मैं इन फ़ाइलों को कैसे निकाल सकता हूं?


5
के बीच nameऔर जगह होनी चाहिए '*.gz'
जोस

जवाबों:


136

जैसा कि @ जूस ने बताया कि आपके बीच एक जगह छूट गई nameऔर '*.gz'; केवल f iles -type fपर कमांड चलाने के लिए कमांड उपयोग विकल्प को तेज करने के लिए भी ।

तो निश्चित कमांड होगी:

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;

स्पष्टीकरण:

  • find: को खोजने के लिए यूनिक्स कमांड Iles / irectories / एल स्याही और आदि
  • /path/to/: अपनी खोज शुरू करने के लिए निर्देशिका।
  • -type f: केवल फ़ाइलें खोजें।
  • -name '*.gz': सूची फाइलों के साथ समाप्त होती है .gz
  • -mtime +7: केवल 7 दिनों से अधिक पुराने संशोधन समय वाले लोगों पर विचार करें।
  • -execdir ... \;: इस तरह के प्रत्येक परिणाम के लिए, निम्न कमांड में करें ...
  • rm -- '{}': फ़ाइल को हटा दें; वह {}भाग वह होता है जहाँ खोज परिणाम पिछले भाग से प्रतिस्थापित हो जाता है। --इसका मतलब यह है कि कमांड पैरामीटर्स की समाप्ति हाइफ़न से शुरू होने वाली फ़ाइलों के लिए त्रुटि को रोकने से बचें ।

वैकल्पिक रूप से, उपयोग करें:

find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --

आदमी से :

-print0 
      True; print the full file name on the standard output, followed by a null character 
  (instead of the newline character that -print uses). This allows file names that contain
  newlines or other types of white space to be correctly interpreted by programs that process
  the find output. This option corresponds to the -0 option of xargs.

जो थोड़ा अधिक कुशल है, क्योंकि यह निम्नलिखित है:

rm file1 file2 file3 ...

विरोध के रूप में:

rm file1; rm file2; rm file3; ...

में के रूप में -execविधि।


इसके बजाय एक वैकल्पिक और तेज़ कमांड निष्पादन के +टर्मिनेटर\; का उपयोग कर रहा है :

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +

यह कमांड rmहर बार फाइल मिलने के बजाए अंत में केवल एक बार चलेगी और यह कमांड -deleteआधुनिक रूप में निम्न विकल्प का उपयोग करने में लगभग उतनी ही तेज है find:

find /path/to/ -type f -mtime +7 -name '*.gz' -delete

3
मैं -deleteअंत में सीधे क्यों नहीं जाऊंगा ? +या के साथ खिलवाड़ क्यों \;?
बारिश 01


2

खोज के साथ फ़ाइलों को हटाने से सावधान रहें। आप क्या निकाल रहे हैं यह जांचने के लिए -ls के साथ कमांड चलाएँ

find /media/bkfolder/ -mtime +7 -name '*.gz' -ls । फिर इतिहास और कमांड से पुल अप करें-exec rm {} \;

नुकसान की सीमा एक खोज आदेश कर सकते हैं। यदि आप फ़ाइलों को केवल एक निर्देशिका से निकालना चाहते हैं, तो -maxdepth 1उपनिर्देशिकाओं के माध्यम से चलने या पूर्ण प्रणाली को खोजने से रोकता है यदि आप टाइपो करते हैं /media/bkfolder /

अन्य सीमाएँ जो मैं जोड़ रहा हूं वे अधिक विशिष्ट नाम तर्क हैं -name 'wncw*.gz', जैसे कि एक नए समय की तुलना में -mtime -31, और खोजे गए निर्देशिकाओं को उद्धृत करना। ये विशेष रूप से महत्वपूर्ण हैं यदि आप क्लीनअप को स्वचालित कर रहे हैं।

find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.