सवाल निर्देशिका से सभी फाइलों को कैसे हटाएं?


मुझे मिल गया सबसे नज़दीक है

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

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


205
2017-09-06 07:58


मूल




जवाब:


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

निर्देशिका में सबकुछ हटाने के लिए:

rm /path/to/directory/*

आप इसका उपयोग कर सकते हैं -r विकल्प, उदाहरण के लिए:

rm -r /path/to/directory/* 

उस निर्देशिका के अंदर किसी भी उप निर्देशिका (उनकी सभी सामग्री के साथ) को हटाने के लिए, जिससे आप सामग्री को हटा रहे हैं। अन्यथा यह आपको सूचित करने में एक त्रुटि दिखाएगा कि यह निर्देशिका को हटा नहीं रहा है।


236
2017-09-06 08:06



यदि आप छिपी हुई फाइलों को भी हटाना चाहते हैं shopt -s dotglob दौड़ने से पहले rm (...) - danjjl
उपाय all files ;) *.* मतलब है कि सभी फाइलें हैं . कहीं नाम में - Rinzwind
@Rinzwind, अधिक सटीक रूप से, तारांकन का मतलब है "किसी भी चरित्र का शून्य या अधिक"। इसलिए *a* इसका मतलब है शून्य या अधिक वर्ण, इसके बाद a शून्य या अधिक वर्णों के बाद। यह फ़ाइल नाम से मेल खाता है happy, apple, a या la। - DisgruntledGoat
@ user784637 आप बहुत आसानी से प्रभावित हैं - barlop
यहां वह आदेश दिया गया है जो आप चाहते हैं: आरएम - * - anon58192932


  • दूर करना। फ़ोल्डर इसकी सभी सामग्री के साथ (सभी आंतरिक फ़ोल्डरों सहित):

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

    rm -rf /path/to/directory/*
    

    या

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

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

  • फ़ोल्डर के अंदर से सभी "फाइलें" को निकालने के लिए (नहीं आंतरिक फ़ोल्डरों को हटा रहा है):

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

कहा पे:

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

126
2017-09-07 17:26



मैंने इसे उत्तर के ऊपर और ऊपर, अधिक स्वीकार्य के रूप में चिह्नित किया गया था, जो अधिक व्यापक और सहायक उत्तर के रूप में पाया। - inspirednz
rm -rf /path/to/directory/* फ़ोल्डर में एक छिपी हुई फ़ाइल को नहीं हटाता है उदा। .htaccess। शायद rm -rf /path/to/directory/.? कोशिश नहीं की है। - Mark Berry
@ मार्कबरी आरएम-आरएफ / पैथ /to/directory/.* - Lilian A. Moraru
@ लिलियन ए। मोरारू, मैंने आज कुछ परीक्षण किया। rm -rf /path/to/directory/.* केवल निर्दिष्ट निर्देशिका में छिपी हुई फाइलों को हटा देता है। @ रंजविंड के उत्तर पर @ डांजल की टिप्पणी को देखते हुए, छिपी हुई फाइलों को हटाने के लिए, चलाएं shopt -s dotglob दौड़ने से पहले rm -rf /path/to/directory/*। - Mark Berry
सावधान: rm -rf /path/to/directory/.* मेरे सिस्टम पर वस्तुओं को हटाने का कारण बन गया /path/to। सौभाग्य से, मैंने अपने पूरे डेटा को एक अलग डिस्क पर बैक अप लिया था। कहने की जरूरत नहीं है, आदेश जारी न करें rm -rf /path/to/directory/.* जब तक कि आप अपने पूरे कंप्यूटर को एक अलग / सुरक्षित स्थान पर बैक अप नहीं ले लेते! - lawlist


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

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

30
2017-11-23 09:38



यह सुंदर स्वीकार्य उत्तर होना चाहिए। धन्यवाद! - Nam G VU
यह ग्लोब मैच नहीं है "। और भी? - hertzsprung
@hertzsprung - यह करता है, और यह आपको एक चेतावनी देगा कि यह हटा नहीं सकता है ./ तथा ../, लेकिन यह अभी भी छिपी हुई फाइलों को हटा देगा। - Ryan Wheale
यह मैक कंसोल पर काम नहीं करता है, छिपी हुई फाइलें अभी भी कमांड लाइन के साथ हैं। - agapitocandemor


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

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

या

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

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


8
2017-09-06 12:13



GNU find के रूप में -delete विधेय। यदि आप अभी भी उपयोग करना चाहते हैं -exec, प्रतिस्थापित \; साथ में + इकट्ठा होगा rm एक साथ कॉल, दक्षता में वृद्धि। - enzotib
'+' वाली बड़ी मात्रा में फाइलें समस्याएं पैदा करेंगी, क्योंकि सूची बहुत बड़ी होगी, जैसे कि आरएम-एफ *। और जब एक ही फ़ोल्डर (मिलन में बात कर रहे) से बड़ी मात्रा में फ़ाइलों को हटाते हैं तो वे दोनों अच्छे नहीं होते हैं :) अंत में सी ++ साथ आया और डायर-पेड़ में इनोड के क्रम में फ़ाइलों को हटा दिया गया। - Osis
आरएम के बाद आपको वास्तव में एक जोड़ना चाहिए। इसके बिना यदि आपके पास फ़ाइल नाम हैं- आरएफ या इसी तरह के आरएम के तर्क के रूप में व्याख्या की जाएगी। जैसे xargs -0 आरएम - या -exec आरएम - {} \; - Richm
आप xargs को -n तर्क भी प्रदान कर सकते हैं। इससे आरएम कमांड को अधिकतम संख्या में तर्क देने के लिए विभाजित किया जाएगा अर्थात 'xargs -n 100 -0 rm -' 100 के हिस्सों में फ़ाइलों को हटा देगा। - Richm
आप यह सुनिश्चित करने के लिए -मैक्सडेप 1 भी जोड़ सकते हैं कि खोज किसी उपनिर्देशिका से फ़ाइलों को वापस नहीं लाती है। यानी खोजें / पथ / से / निर्देशिका -मैक्सडेप 1-प्रकार एफ - Richm


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


6
2017-09-07 08:51





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

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

    rm -rf dir_name && mkdir dir_name
    
  • उपयोग find

    find dir_name -mindepth 1 -delete  
    

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


5
2017-11-27 16:05



आपकी सलाह के लिए धन्यवाद और मैंने लिंक के लिए और स्पष्टीकरण जोड़ा है। - zeekvfu
सावधान रहें, क्योंकि फ़ोल्डर को हटाने और फिर से बनाने के परिणामस्वरूप इस फ़ोल्डर के लिए अलग / गलत अनुमतियां हो सकती हैं! - einjohn


आप ऐसा कर सकते हैं cd निर्देशिका में और फिर आदेश चलाएँ rm *.* यदि आपको याद है तो बस डॉस की तरह।


1
2018-05-01 00:59



डीओएस फ़ाइलों के लिए डीएल है और रिक्त निर्देशिकाओं के लिए आरएमडीआईआर- और छिपी हुई और सिस्टम फ़ाइलों में उन एटीटीआरबी गुणों को पहले हटा दिया जाना चाहिए। लगभग उतना आसान नहीं;) - Eric


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

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


0
2017-08-29 07:17





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

अन्य उत्तरों विभिन्न समस्याओं से पीड़ित हैं:

  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 इसकी सामग्री को हटाने से।


-1
2018-05-21 00:54



और गहराई के पहले आदेश के लिए, एक है -depth में झंडा find उसके लिए। - Sergiy Kolodyazhnyy
उह ... क्यों न सिर्फ उपयोग करें -delete साथ में find? -delete गहराई पहले है। आप पहले ही गैर-पॉज़िक्स मान रहे हैं find उसके साथ -printf, तो आप भी उपयोग कर सकते हैं -delete या -depth -print0 | xargs -0 rm - muru
@मुरु: क्योंकि मैं बेहतर नहीं जानता था ... मैं इसे बदल दूंगा। - Mehrdad
@मुरु: वास्तव में, ऐसा लगता है कि आपकी विधि के साथ काम नहीं करता है -not \( -path "$DIR/subdir" \)... लेकिन मेरा करता है? क्यूं कर? - Mehrdad
@ मेहरदद क्या करना है? - muru