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


10

मेरे पास 2010 वर्ष से फाइलों के साथ निर्देशिका है .. मैं 500 दिनों से अधिक पुरानी सभी फ़ाइलों को हटाना चाहता हूं और मैंने यह कोशिश की:

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

लेकिन मुझे यह मिलता है:

-bash: /usr/bin/find: Argument list too long

जैसा कि मुझे पता है इसका मतलब है कि बहुत सारी फाइलें हैं और findउन्हें संभाल नहीं सकते। लेकिन अगर मैं +20003+ साल लगाऊं तो भी मुझे यही मिल रहा है।

मुझे यहाँ क्या याद आ रहा है?


1
unix.stackexchange.com/a/239268/116858 (यह भी टिप्पणी देखें)
Kusalananda

जवाबों:


18

आप याद कर रहे हैं कि findइनपुट के रूप में फ़ाइलों की सूची की आवश्यकता नहीं है। समस्या यह है कि ग्लोब /var/log/arc/*बहुत अधिक फ़ाइलों तक फैलता है। हालाँकि, findडिफ़ॉल्ट रूप से उपनिर्देशिकाओं में पुनरावृत्ति करेगा, इसलिए ग्लोब का उपयोग करने की कोई आवश्यकता नहीं है:

find /var/log/arc/ -type f -mtime +500 -delete

-deleteएक गैर-मानक विधेय है। यदि आपका findकार्यान्वयन इसका समर्थन नहीं करता है, तो आप इसका उपयोग कर सकते हैं:

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

बजाय।


धन्यवाद, लेकिन अब यह मिल गया: find: invalid predicate -Dlete'`
गर्ग

1
@ पहले, क्षमा करें, मैंने अभी आपकी आज्ञा की नकल की है और ध्यान नहीं दिया है कि आपका वाक्यविन्यास गलत है। -deleteनहीं ले करता है {}। अपडेट देखें हालाँकि, आपका त्रुटि संदेश यह बताता है कि आपका संस्करण findसमर्थन नहीं करता है -delete। यदि आप जीएनयू का उपयोग नहीं कर रहे हैं find(जो कि ज्यादातर मामलों में जब तक आप लिनक्स का उपयोग नहीं कर रहे हैं), तो आपको -exec -rm {} \;इसके बजाय उपयोग करने की आवश्यकता है ।
terdon

धन्यवाद। -exec rm {} \;चाल चलो।
गर्ग

1
@hobbs मैं क्यों नहीं, नहीं दिख रहा -execहै POSIX द्वारा परिभाषित किया गया
terdon

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