निर्देशिका से सभी फ़ाइलों को कैसे निकालें?

निकटतम मैं मिल गया है

# rm /path/to/directory/*.*

लेकिन यह उन फ़ाइलों के लिए काम नहीं करता है जिनके पास एक्सटेंशन नहीं है । ..

लिनक्स एक्सटेंशन का उपयोग नहीं करता है । यह फ़ाइल के निर्माता पर निर्भर है कि वह यह तय करे कि नाम का एक्सटेंशन होना चाहिए या नहीं । लिनक्स पहले कुछ बाइट्स को देखता है ताकि यह पता लगाया जा सके कि यह किस तरह की फाइल से निपट रहा है ।

  • सभी को हटाने के लिए गैर-छिपी हुई फ़ाइलें* एक निर्देशिका उपयोग में:

    rm /path/to/directory/*

    हालाँकि, यह प्रत्येक उप-निर्देशिका के लिए एक त्रुटि दिखाएगा, क्योंकि इस मोड में इसे केवल फ़ाइलों को हटाने की अनुमति है ।

  • निर्देशिका उपयोग में सभी गैर-छिपी हुई फ़ाइलों और उप-निर्देशिकाओं (उनकी सभी सामग्री के साथ) को हटाने के लिए:

    rm -r /path/to/directory/*

* छिपी हुई फाइलें और निर्देशिका वे हैं जिनके नाम से शुरू होते हैं . (डॉट) चरित्र, उदा । : .hidden-file या .hidden-directory/. ध्यान दें कि, बैश में, यदि dotglob विकल्प (जो डिफ़ॉल्ट रूप से बंद है) सेट है, rm छिपी हुई फ़ाइलों पर भी कार्य करेगा, क्योंकि उन्हें कब शामिल किया जाएगा * फ़ाइल नाम तर्कों की सूची प्रदान करने के लिए शेल द्वारा विस्तारित किया गया है ।

  • अपनी सभी सामग्री के साथ एक फ़ोल्डर को हटाने के लिए (सभी आंतरिक फ़ोल्डरों सहित):

    rm -rf /path/to/directory
  • सभी को हटाने के लिए फ़ोल्डर की सामग्री (सभी आंतरिक फ़ोल्डरों सहित) लेकिन फ़ोल्डर ही नहीं:

    rm -rf /path/to/directory/*

    या, यदि आप यह सुनिश्चित करना चाहते हैं कि छिपी हुई फ़ाइलें / निर्देशिकाएँ भी हटा दी जाएँ:

    rm -rf /path/to/directory/{*,.*}
  • एक फ़ोल्डर के अंदर से सभी फ़ाइलों को हटाने के लिए(नहीं आंतरिक फ़ोल्डर हटाना):

    rm -f /path/to/directory/{*,.*}

चेतावनी: यदि आपके रास्ते में रिक्त स्थान हैं, तो हमेशा उद्धरणों का उपयोग करना सुनिश्चित करें ।

rm -rf /path/to the/directory/*

2 अलग के बराबर है rm -rf कॉल:

rm -rf /path/torm -rf the/directory/*

इस समस्या से बचने के लिए, आप उपयोग कर सकते हैं 'एकल-उद्धरण'(शेल चर के सभी विस्तार को रोकता है) या "डबल-उद्धरण"(शेल चर के विस्तार की अनुमति देता है, लेकिन अन्य विस्तार को रोकता है):

rm -rf "/path/to the/directory/"*

जहां:

  • rm - के लिए खड़ा है निकालें
  • -f - के लिए खड़ा है बल उदाहरण के लिए, यदि आप किसी संग्रह को हटाना चाहते हैं तो आपसे पूछे जाने/संकेत न देने पर कौन सा मददगार है ।
  • -r - के लिए खड़ा है पुनरावर्ती जिसका अर्थ है कि आप हर फ़ोल्डर को पुनरावर्ती रूप से नीचे जाना चाहते हैं और सब कुछ हटा देना चाहते हैं ।

निर्देशिका में सभी फ़ाइलों को हटाने के लिए (छिपी हुई फ़ाइलों और उपनिर्देशिकाओं सहित) चलाएं:

rm -rf /path/to/directory/{*,.*}

सभी फ़ाइलों और निर्देशिकाओं को हटाने के लिए (सहित छिपा हुआ वाले) एक निर्देशिका में, आप निम्न प्रयास कर सकते हैं:

  • फ़ोल्डर हटाएं, फिर इसे फिर से बनाएं

    rm -rf dir_name && mkdir dir_name
  • उपयोग करें find

    find dir_name -mindepth 1 -delete  

यहां हम निर्दिष्ट करते हैं -mindepth 1 निर्देशिका डिर_नाम को बाहर करने के लिए ।
निम्नलिखित लिंक पर एक नज़र डालें:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

यदि आप केवल /पथ/से/निर्देशिका में फ़ाइलों को हटाना चाहते हैं तो आप कर सकते हैं

find /path/to/directory -type f -print0| xargs -0 rm 

या

find /path/to/directory -type f -exec rm '{}' \;

आप इसके साथ भार कर सकते हैं find, लाभ यह है कि आप यह सूचीबद्ध कर सकते हैं कि इसे पाइप किए बिना क्या पाया जाता है rm तो आप देख सकते हैं कि शुरू करने से पहले क्या हटाया जाएगा ।

यदि आप सभी उपनिर्देशिकाओं और निर्देशिका को स्वयं हटाना चाहते हैं, तो आप उपयोग कर सकते हैं rm -rf /path/to/directory. लेकिन रिटर्न दबाने से पहले हमेशा अपनी लाइन को दोबारा जांचें, rm -rf कर सकते हैं के बहुत सारे कारण havock के रूप में अच्छी तरह से, उदाहरण के लिए, अगर आप गलती से एक अंतरिक्ष डालने के बाद पहली स्लैश आ रहा है, जबकि सुपर उपयोक्ता अनुमतियाँ...

चूंकि यह सवाल लगातार गूगल के शीर्ष पर है जब मैं इसे स्वयं खोजता हूं:

अन्य उत्तर विभिन्न समस्याओं से ग्रस्त हैं:

  1. उनमें से कुछ में शामिल हैं . और .. जो शोर, भ्रामक और कष्टप्रद है ।

  2. उनमें से कुछ छिपी हुई फ़ाइलों (डॉट से शुरू होने वाली फाइलें) को भूल जाते हैं ।

  3. वे निर्देशिका हटाने की अनुमति देने के लिए एक सही (गहरे-पहले) क्रम में नहीं हटाते हैं ।

  4. वे अन्य (घुड़सवार) फ़ाइल सिस्टम में उतरते हैं, जो अक्सर अवांछित होता है ।

  5. उन्हें अतिरिक्त मापदंडों के साथ ठीक से विस्तारित करना मुश्किल है (नीचे उस पर अधिक) ।

इसलिए, निर्देशिका में सभी फ़ाइलों और फ़ोल्डरों को पुनरावर्ती रूप से हटाने के लिए, ऐसा करें:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

ध्यान दें कि मैंने एक जोड़ा -xdev माउंट में उतरने से रोकने के लिए तर्क (जैसे /proc आदि । ).

क्यों नहीं -depth या -delete?

इसके लिए लोग मुझे लगातार नीचा दिखाने के बावजूद, उन तरीकों में एक नकारात्मक पहलू है: ऐसा नहीं लगता कि वे अनुमति देने के लिए पर्याप्त एक्स्टेंसिबल हैं -pruneएक उपनिर्देशिका (अधिक समस्याओं को पेश किए बिना) । इस विधि के विपरीत, आप सम्मिलित कर सकते हैं

-not \( -path "${DIR}/subdir" -prune \)

से पहले -mindepth बाहर करने का तर्क subdir इसकी सामग्री हटाए जाने से ।

आप कर सकते हैं cd निर्देशिका में और फिर कमांड चलाएं rm *.* बस में की तरह DOS अगर तुम्हें याद है.

वर्तमान निर्देशिका को हटाने के लिए, आप उदाहरण के लिए उपयोग कर सकते हैं rm -d ./*

- डी निर्देशिकाओं को भी हटाने के लिए कहता है ।

यहां उत्तर देखें, यह छिपी हुई फ़ाइलों को हटा सकता है और साथ ही किसी भी चेतावनी को हटा सकता है और निर्देशिका को हटा सकता है ubuntu - Delete contents but not directory in Linux? - Stack Overflow

मेरे पास वास्तविक उत्तर जोड़ने के लिए पर्याप्त प्रतिष्ठा नहीं है, लेकिन बैश में शॉप्ट-एस डॉटग्लोब एंड एंड आरएम /पथ/टू/डायरेक्टरी/* समाधान का उपयोग करते समय, (शॉप्ट-एस डॉटग्लोब एंड एंड आरएम /पथ/टू/डायरेक्टरी/*) (कोष्ठक के साथ) शॉप्ट-एस डॉटग्लोब को इस एक कमांड से परे लीक होने से रोकेगा । (कोष्ठक एक सबशेल में निहित कमांड चलाते हैं । )