निर्देशिका को गहराई से नेस्टेड-पहले सूचीबद्ध करें।
find . -depth -type d -exec rmdir {} \; 2>/dev/null
(ध्यान दें कि पुनर्निर्देशन find
एक पूरे के रूप में कमांड पर लागू होता है , केवल करने के लिए नहीं rmdir
। केवल पुनर्निर्देशन rmdir
एक महत्वपूर्ण मंदी का कारण होगा क्योंकि आपको एक मध्यवर्ती शेल को लागू करने की आवश्यकता होगी।)
खोजने के rmdir
लिए -empty
विधेय पास करके आप गैर-खाली निर्देशिकाओं पर चलने से बच सकते हैं। जब यह कमांड चलने वाला होता है, तो GNU निर्देशिका का परीक्षण करता है, इसलिए अभी खाली की गई निर्देशिका को उठाया जाएगा।
find . -depth -type d -empty -exec rmdir {} \;
तेजी लाने का एक और तरीका यह होगा कि rmdir
इनवोकेशन को ग्रुप बनाया जाए । दोनों मूल रूप से, विशेष रूप से सिग्विन के तहत तेजी से ध्यान देने योग्य होने की संभावना है। मुझे इन दोनों के बीच बहुत अंतर की उम्मीद नहीं है।
find . -depth -type d -print0 | xargs -0 rmdir 2>/dev/null
find . -depth -type d -exec rmdir {} + 2>/dev/null
कौन सी विधि तेज है यह इस बात पर निर्भर करता है कि आपके पास कितने गैर-खाली निर्देशिका हैं। आप -empty
इनवॉइस को समूहीकृत करने के तरीकों के साथ गठजोड़ नहीं कर सकते , क्योंकि तब जो निर्देशिका केवल खाली निर्देशिका होती है, वे समय find
पर खाली नहीं दिखतीं ।
एक और तरीका कई पासों को चलाने का होगा। क्या यह तेज है, बहुत सारी चीजों पर निर्भर करता है, जिसमें यह भी शामिल है कि क्या पूरी निर्देशिका पदानुक्रम डिस्क कैश में find
रन के बीच रह सकती है ।
while [ -n "$(find . -depth -type d -empty -print -exec rmdir {} +)" ]; do :; done
वैकल्पिक रूप से, zsh का उपयोग करें। ग्लोब क्वालीफायर F
गैर खाली निर्देशिका से मेल खाता है, तो /^F
खाली निर्देशिका से मेल खाता है। केवल खाली निर्देशिका वाले निर्देशिकाओं का इतनी आसानी से मिलान नहीं किया जा सकता है।
while rmdir **/*(/N^F); do :; done
(यह तब समाप्त होता है जब rmdir
एक खाली कमांड लाइन प्राप्त होती है।)