जब "तर्क सूची बहुत लंबी है" 3 दिनों से अधिक पुरानी सभी फ़ाइलों को हटाने के लिए कैसे?


89

मुझे एक लॉग फ़ाइल निर्देशिका मिली है जिसमें 82000 फाइलें और निर्देशिकाएं हैं (लगभग आधा और आधा)।

मुझे उन सभी फ़ाइल और निर्देशिकाओं को हटाने की आवश्यकता है जो 3 दिनों से अधिक पुरानी हैं।

एक निर्देशिका में जिसमें 37000 फाइलें हैं, मैं इसके साथ ऐसा करने में सक्षम था:

find * -mtime +3 -exec rm {} \;

लेकिन 82000 फाइलों / निर्देशिकाओं के साथ, मुझे त्रुटि मिलती है:

/ usr / bin / ढूँढें: तर्क सूची बहुत लंबी है

मैं इस त्रुटि के आसपास कैसे पहुंच सकता हूं ताकि मैं 3 दिनों से अधिक पुरानी सभी फ़ाइलों / निर्देशिकाओं को हटा सकूं?


1
क्या आपने कोशिश की है find -mtime +3 -exec rm {} +?
गाइल्स क्वेनोट

1
मेरा मानना ​​है कि दौड़ने से find * -mtime +3 |xargs rmउस समस्या का समाधान हो जाएगा।
मैट पीटरसन

9
मुझे लगता है कि केवल समस्या है find *find .बेहतर है। *फ़ाइलों और निर्देशिकाओं की एक विशाल सूची का विस्तार करने वाला शेल गोलाकार ।
आर्टलेस शोर

@artlessnoise पर हाजिर है।
साजास

जवाबों:


120

वर्तमान निर्देशिका के भीतर सभी फ़ाइलों और निर्देशिकाओं को हटाने के लिए :

find . -mtime +3 | xargs rm -Rf

या वैकल्पिक रूप से, ओपी के मूल आदेश के अनुरूप अधिक:

find . -mtime +3 -exec rm -Rf -- {} \;

26
-1 समस्या "ढूंढो" में स्टार है, आपने इसे "खोज" का उपयोग करके हल किया। बजाय। Xargs यहाँ गुमराह कर रहा है।
14१३ पर लग्जरी लेवुक

7
@AleksandrLevchuk यह ओप्स समस्या का हल करता है, और इसलिए यह एक मूल्य के लायक नहीं है
hd1

11
प्रश्न: "* -mtime +3 -exec rm {} \" खोजें? " तर्क सूची को बहुत लंबा कर देता है। उत्तर: "Find -mtime +3 -exec rm {} \" का उपयोग करें? "

2
आप --rm के बाद जोड़ना चाह सकते हैं , जैसेfind . -mtime +3 -exec rm -- {} \;
domen

8
किसी ने नहीं कहा कि इसके --लिए क्या है।
एक्यूमेनस

59

भी उपयोग कर सकते हैं:

find . -mindepth 1 -mtime +3 -delete

लक्ष्य निर्देशिका को हटाने के लिए नहीं


4
सबसे अच्छा जवाब, आरएम (और शायद सुरक्षित) को कॉल करने की तुलना में बहुत क्लीनर। उपनिर्देशिका के लिए भी काम करता है।
बेसिक 6

16

मूल प्रश्न के लिए एक और समाधान, esp। यदि आप किसी फ़ोल्डर में पुरानी फ़ाइलों में से केवल कुछ को हटाना चाहते हैं, तो इस तरह से smth किया जाएगा:

find . -name "*.sess" -mtime +100 

और इसी तरह .. ब्लॉक शेल वाइल्डकार्ड को उद्धृत करता है, इस प्रकार आपको लाखों फाइलों को "खोजने" की अनुमति देता है :)

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