आप कुछ इस तरह की कोशिश करना चाह सकते हैं:
find /tmp -mtime +7 -and -not -exec fuser -s {} ';' -and -exec echo {} ';'
फाइंड का उपयोग उन फाइलों को खोजने के लिए किया जाता है जो कुछ मानदंडों से मेल खाती हैं।
-mtime +7
केवल 7 दिनों से अधिक पुरानी फ़ाइलों का चयन करता है (आप किसी अन्य मूल्य का उपयोग कर सकते हैं)
-exec fuser -s {} ';'
हर फ़ाइल में मूक मोड में फ़्यूज़र को कॉल करता है जो पुरानेपन के मानदंडों से मेल खाता है। fuser हर फ़ाइल के लिए 0 (= true) देता है जिसे अभी एक्सेस किया गया है और 1 (= गलत) अनधिकृत लोगों के लिए है। जैसा कि हम केवल अनजान लोगों में रुचि रखते हैं, हम -not
इस के सामने रखते हैं-exec
-exec echo {} ';'
बस सभी फ़ाइल नामों को प्रिंट करता है जो मापदंड से मेल खाता है। आप -exec rm {} ';'
यहाँ के बजाय उपयोग करना चाहते हैं , लेकिन के रूप में यह अभी भी उपयोग की कुछ फ़ाइलों को हटा सकते हैं, मुझे लगता है कि यह एक सरल गूंज पहले सुरक्षित है।
- संपादित करें: आप आकस्मिक प्रभावों से बचने के लिए कुछ चीज़ों को जोड़ना
-name 'foo*.bar'
या -uid 123
क्लीन फ़ाइल के प्रभाव को विशिष्ट फ़ाइल पैटर्न या उपयोगकर्ता आईडी तक सीमित करना चाह सकते हैं ।
अंतिम बिंदु तक: विचार करें कि ऐसी फाइलें हो सकती हैं जो केवल एक बार लिखी जाती हैं (जैसे सिस्टम बूट पर) लेकिन अक्सर पढ़ी जाती हैं (उदाहरण के लिए कोई भी एक्स-सत्र-कुकी)। इसलिए मैं आपके दोषपूर्ण कार्यक्रमों द्वारा बनाई गई फ़ाइलों को प्रभावित करने के लिए कुछ नाम चेक जोड़ने की सलाह देता हूं।
edit2:
आपके अंतिम प्रश्न के लिए: एक फ़ाइल को डिस्क से तब तक नहीं हटाया जाएगा जब तक कि किसी भी प्रक्रिया के लिए एक खुला हैंडल न हो (कम से कम देशी लिनक्स फाइल सिस्टम के लिए)। समस्या यह है कि निर्देशिका प्रविष्टि को तुरंत हटा दिया जाता है, जिसका अर्थ है कि जब आप फ़ाइल को निकालते हैं, तो कोई भी नई प्रक्रिया फ़ाइल को नहीं खोल सकती है (क्योंकि इसमें कोई फ़ाइल नाम संलग्न नहीं है)।
विवरण के लिए देखें:
/programming/3181641/how-can-i-delete-a-file-upon-its-close-in-c-on-linux
edit3: लेकिन क्या होगा अगर मैं पूरी प्रक्रिया को स्वचालित करना चाहता था?
जैसा कि मैंने कहा, ऐसी फाइलें हो सकती हैं जो एक बार लिखी जाएं और फिर एक बार (जैसे एक्स सेशन कुकीज, पीआईडी फाइलें आदि) हर एक बार पढ़ें। उन लोगों को इस निष्कासन स्क्रिप्ट से बाहर नहीं किया जाएगा (यही कारण है कि आप echo
वास्तव में फ़ाइलों को हटाने से पहले पहले एक परीक्षण चलाना चाहते हैं )।
एक सुरक्षित समाधान को लागू करने का एक तरीका उपयोग करना है atime
।
atime
प्रत्येक फ़ाइल को अंतिम बार एक्सेस करने का समय संग्रहीत करता है। लेकिन वह फ़ाइल सिस्टम विकल्प अक्सर अक्षम होता है क्योंकि इसका कुछ प्रदर्शन प्रभाव पड़ता है ( 20-30% क्षेत्र में इस ब्लॉग के अनुसार )। वहाँ है relatime
, लेकिन अगर mtime
कोई बदल गया है तो केवल एक्सेस समय लिखता है , इसलिए यह हमारी मदद नहीं करेगा।
यदि आप उपयोग करना चाहते हैं atime
, तो मैं /tmp
एक अलग विभाजन (आदर्श रूप से एक रैमडिस्क) पर रखने की सलाह दूंगा ताकि पूरे सिस्टम पर प्रदर्शन प्रभाव बहुत बड़ा न हो।
एक बार atime
सक्षम होने के बाद, आपको बस इतना करना है -mtime
कि उपरोक्त कमांड लाइन में पैरामीटर को बदलें -atime
।
आप इसे हटाने में सक्षम हो सकते हैं -not -exec fuser -s {} ';'
, लेकिन मैं यह सुनिश्चित करने के लिए वहां रखूंगा (यदि मामले में एप्लिकेशन लंबे समय तक फाइलें खुली रखें)।
लेकिन echo
अपने सिस्टम को अभी भी जरूरत के सामान को हटाने से पहले कमांड का उपयोग करने के लिए ध्यान रखें !