एक निश्चित तिथि से पहले बनाई गई सभी फ़ाइलों को हटा दें


26

मेरे पास एक निर्देशिका है जिसमें अधिक संख्या में फाइलें हैं (जैसे कि वर्ष के प्रत्येक दिन के लिए लॉग)। मैं 22/11 के कहने से पहले बनाई गई सभी फाइलों को हटाना चाहूंगा। मैं उसे कैसे प्राप्त कर सकता हूं ? क्या मुझे findनिष्पादित करना चाहिए -rm? मैं ksh का उपयोग कर रहा हूं।


1
सामान्य चेतावनी यह है कि यूनिक्स फाइल सिस्टम में आम तौर पर उस समय का रिकॉर्ड नहीं होता है जब फ़ाइल बनाई गई थी - केवल उस समय जब इनोड और सामग्री को अंतिम रूप से संशोधित किया गया था तब उपलब्ध हैं।
टोबी स्पाइट

जवाबों:


35

का उपयोग करना findअभी भी फ़ाइलों को हटाने का पसंदीदा तरीका है। अधिक के लिए http://mywiki.wooledge.org/UsingFind देखें ।

ऐसा करने का एक तरीका यह है कि इसमें समय-मोहर के साथ एक फ़ाइल बनाई जाए। जैसे

touch -t 201311220000 /tmp/timestamp

अब जीएनयू find(वर्तमान निर्देशिका में मानकर) फ़ाइलों को हटा दें, जो समय-स्टाम्प से मेल खाते हैं जैसे:

find . -type f ! -newer /tmp/timestamp -delete  

या गैर GNU खोजें

find . -type f ! -newer /tmp/timestamp -exec rm {} \;

2
इस बारे में क्या ? क्या यह काम करता है ? find -type f -mtime +5 -exec rm -f {} \;
user1058398

1
@ user1058398 जो अब से 5 दिनों से अधिक पुरानी फ़ाइलों को हटा देगा।
वैलेंटाइन बजरमी

क्या यह फ़ाइलों के साथ फ़ोल्डर भी हटाता है? @ val0x00ff
alper

1
@Avatar नहीं क्योंकि type -fकेवल फाइलों तक कार्रवाई को सीमित करता है।
वैलेंटाइन बजरमी

22

GNU या कुछ BSD के साथ find:

find . ! -newermt 2013-11-22 ! -type d -delete

ध्यान दें कि यह फ़ाइलों के अंतिम संशोधन समय की जांच करता है। कुछ बीएसडी पर, आप फ़ाइल के इनोड जन्म समय की जांच करने के -newerBtस्थान पर उपयोग कर सकते हैं यदि उपलब्ध हो।-newermt


1
find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;

उदाहरण:

find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;

इस स्थिति में यह 15 दिनों से अधिक के साथ "ORA_XEO" शुरू करने वाली सभी फ़ाइलों को हटा देगा।


हालांकि rm -rf, इसे बेहतर तरीके से देखते हैं , पहला कमांड किसी भी निर्देशिका में निहित सभी चीजों को हटा देगा जो उन 15 दिनों से अधिक पुराने हैं। (इसके अलावा, कोष्ठक के आसपास क्यों -name?)
ilkachachu

आप सही हैं, हमें "" ("") "" डालने की आवश्यकता नहीं है।
15

लेकिन अगर हम एक शर्त जोड़ना चाहते हैं तो यह उपयोगी हो सकती है। उदाहरण के लिए यदि हम ".jar" या ".cp" के साथ समाप्त होने वाली सभी फ़ाइलों को निकालना चाहते हैं, और "पूर्व" से शुरू करें। example.jar- इसे हटा दिया जाएगा - इसे हटा दिया example.cpजाएगा example.tar- इसे हटा नहीं दिया जाएगा
कैलाफेट

इस स्थिति में हम उपयोग कर सकते हैं:find /path/to/directory/ -mtime +<number of days> \( -name '*.jar' -o -name '*.cp' \) -name 'ex*' -exec rm -rf {} \;
15

यही कारण है कि से कुछ फाइलें निकाल देंगे <दिनों की संख्या> के बजाय पुराने सभी फाइलों से <दिनों की संख्या> जब तक आप इसे आधी रात को वास्तव में चलाने के लिए और यह एक दूसरे के भीतर खत्म। जीएनयू के साथ findआपको मूल्य को आधी रात -daystartतक कम करने के लिए संशोधक का उपयोग करना चाहिए -mtime
15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.