यदि आप एक समय में बहुत बड़ी संख्या में फ़ाइलों को हटाने की कोशिश कर रहे हैं (मैंने 485,000+ आज के साथ एक निर्देशिका को हटा दिया है), तो आप संभवतः इस त्रुटि में भाग लेंगे:
/bin/rm: Argument list too long.
समस्या यह है कि जब आप कुछ टाइप करते हैं rm -rf *
, तो *
उसे हर मेल खाते की सूची से बदल दिया जाता है, जैसे "rm -rf file1 file2 file3 file4" और इसी तरह। इस तर्क की सूची को संग्रहीत करने के लिए स्मृति का एक अपेक्षाकृत छोटा बफर आवंटित किया गया है और यदि इसे भरा जाता है, तो शेल प्रोग्राम को निष्पादित नहीं करेगा।
इस समस्या को हल करने के लिए, बहुत सारे लोग प्रत्येक फ़ाइल को खोजने के लिए खोज कमांड का उपयोग करेंगे और उन्हें इस तरह "rm" कमांड पर एक-एक करके पास करेंगे:
find . -type f -exec rm -v {} \;
मेरी समस्या यह है कि मुझे 500,000 फ़ाइलों को हटाने की आवश्यकता थी और यह बहुत लंबा हो रहा था।
मैं फ़ाइलों को हटाने के एक बहुत तेज़ तरीके से ठोकर खाई - "खोज" कमांड में एक "-डेलीट" झंडा है जो सही में बनाया गया है! यहाँ मैंने क्या उपयोग किया है:
find . -type f -delete
इस पद्धति का उपयोग करते हुए, मैं लगभग 2000 फ़ाइलों / सेकंड की दर से फ़ाइलों को हटा रहा था - बहुत तेजी से!
आप फ़ाइलनाम भी दिखा सकते हैं जैसे आप उन्हें हटा रहे हैं:
find . -type f -print -delete
… या यह भी बताएं कि कितनी फाइलें हटाई जाएंगी, फिर उन्हें हटाने में कितना समय लगता है:
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s