यूनिक्स में, आप वर्तमान निर्देशिका में और उसके नीचे सब कुछ कैसे निकालते हैं?


108

मुझे पता है कि यह सब कुछ एक उपनिर्देशिका और उसके नीचे हटा देगा:

rm -rf <subdir-name>

लेकिन आप वर्तमान निर्देशिका के साथ-साथ इसके नीचे के सभी उपनिर्देशिका और उन सभी उपनिर्देशिकाओं की सामग्री को कैसे हटाते हैं?


2
यह एक
डूप

जवाबों:


166

सुरक्षित कंप्यूटिंग का अभ्यास करें। बस पदानुक्रम में एक स्तर ऊपर जाएं और वाइल्डकार्ड अभिव्यक्ति का उपयोग न करें:

cd ..; rm -rf -- <dir-to-remove>

दो डैश --बताते हैं rmकि <dir-to-remove>यह कमांड-लाइन विकल्प नहीं है, तब भी जब यह डैश से शुरू होता है।


8
यह सुरक्षित क्यों है?
येन

34
क्योंकि आप विशेष रूप से एक नामित निर्देशिका से मेल खा रहे हैं और इस प्रकार कुछ को हटाने की संभावना कम है जिसे आप हटाने का इरादा नहीं रखते हैं।
tvanfosson

5
सच। मैं खुद को बहुत आसानी से करते हुए देख सकता था।
येन

26
क्या यह निर्देशिका को भी नष्ट नहीं करता है? आपको इसके बाद mkdir <dir-to-remove> करना होगा। लेकिन फिर उस निर्देशिका का जिक्र करने वाला कोई हार्डलिंक बाद में एक अलग निर्देशिका होगी।
जोहान्स शाउब -

5
@ हाँ, यदि आप उपयोग करते rm ./हैं तो आप गलती से टाइप rm . /कर सकते हैं जो आपदा हो सकती है।
इरफान्डर

44

वर्तमान के नीचे सभी फ़ाइलों / निर्देशिकाओं को हटा देगा।

find -mindepth 1 -delete

यदि आप किसी अन्य निर्देशिका के साथ भी ऐसा करना चाहते हैं जिसका नाम आपके पास है, तो आप बस उसका नाम रख सकते हैं

find <name-of-directory> -mindepth 1 -delete

यदि आप न केवल उप-निर्देशिका और फ़ाइलों को निकालना चाहते हैं, बल्कि निर्देशिका को भी छोड़ देते हैं, तो छोड़ दें -mindepth 1। इसे हटाएं बिना उन -deleteचीजों की एक सूची प्राप्त करें।


मुझे उप-निर्देशिकाओं में सभी फ़ाइलों को हटाने की आवश्यकता थी, लेकिन वे उप-निर्देशिकाओं को स्वयं हटाना नहीं चाहते थे। <name-of-direcotry> -mindepth 2 -delete ने शानदार काम किया!
टिम डियरबॉर्न

-mindepth 1यदि आपको किसी निर्देशिका ( find <name-of-directory> -mindepth 1 -delete) को निर्दिष्ट करने की आवश्यकता है । अन्यथा जोहानिस सही है कि यह वर्तमान कार्य निर्देशिका (उपयोग करते समय find -delete) को हटा नहीं देगा ।
Weboide

IMO, यह सबसे अच्छा उत्तर है, विशेष रूप से लिपियों में।
१४:१५ पर विझोनेस

1
मैंने कोशिश की: find -mindepth 1 -deleteलेकिन मुझे मिल गया illegal option -- mलेकिन यह बहुत अच्छा काम किया जब मैंने माइंडप्थ ऑप्शन को हटा दिया find . -delete
शेरोन

41

मैं हमेशा जो करता हूं वह टाइप है

rm -rf *

और फिर ESC- * मारा , और बैश वर्तमान कार्य निर्देशिका में फ़ाइलों और निर्देशिकाओं की एक स्पष्ट सूची के लिए * का विस्तार होगा।

लाभ हैं:

  • ENTER मारने से पहले हटाने के लिए मैं फ़ाइलों की सूची की समीक्षा कर सकता हूं।
  • कमांड इतिहास में वाइल्डकार्ड अक्षुण्ण के साथ "rm -rf *" नहीं होगा, जो गलत समय पर गलती से गलत स्थान पर पुन: उपयोग हो सकता है। इसके बजाय, कमांड इतिहास में वास्तविक फ़ाइल नाम होंगे।
  • यह एक या दो बार जवाब देने के लिए आसान हो गया है "एक सेकंड रुको ... मैंने कौन सी फाइलें हटा दीं?"। टर्मिनल स्क्रॉलबैक बफर या कमांड इतिहास में फ़ाइल नाम दिखाई देते हैं।

वास्तव में, मुझे यह इतना पसंद है कि मैंने इसे .bashrc में इस लाइन के साथ TAB के लिए डिफ़ॉल्ट व्यवहार बना दिया है।

bind TAB:insert-completions

--इस जवाब में गुम ? यह दृष्टिकोण कमाल है कुल मिलाकर मुझे कहना होगा।
बेन वोइगट

बेहतर तरीका यह
सूडो के

22

उपयोग

rm -rf *

अद्यतन: .वर्तमान निर्देशिका के लिए खड़ा है, लेकिन हम इसका उपयोग नहीं कर सकते। आदेश के लिए स्पष्ट जांच के लिए लगता है .और ..। इसके बजाय वाइल्डकार्ड ग्लोबिंग का उपयोग करें। लेकिन यह जोखिम भरा हो सकता है।

एक सुरक्षित संस्करण IMO का उपयोग करना है:

rm -ri * 

(यह आपको हर फ़ाइल / निर्देशिका को हटाने से पहले पुष्टि के लिए संकेत देता है।)


13
"जोखिम भरा हो सकता है" चमत्कारिक रूप से लेकोनिक है।

5
इस तरह की चीजें करते समय, मैंने एक त्वरित ls -r पाया है। पहले आपको यह देखने देता है कि आप क्या हटाने जा रहे हैं। एक त्वरित विचार देने के लिए उपयोगी है कि आप पूरी डिस्क को हटाने नहीं जा रहे हैं ...
रिच ब्रैडशॉ

2
यह rm -rf <subdir-name> की तुलना में जोखिम भरा क्यों है?
येन

2
@ हाँ - क्योंकि अगर आप इसे गलत जगह पर करते हैं तो आपको विनाशकारी परिणाम मिल सकते हैं। गलत जगह पर एक विशिष्ट नाम का उपयोग केवल तभी गलत हो सकता है जब वही उपनिर्देशिका वहां मौजूद हो।
tvanfosson

1
आप संभवतः बच्चे में रहते हुए माता-पिता को नहीं हटा सकते।
dirkgently

6

यह सही है कि rm –rf .किसी भी उपनिर्देशिका और उनकी सामग्री सहित वर्तमान में सब कुछ हटा देगा। एकल डॉट ( .) वर्तमान निर्देशिका का मतलब है। सावधान करने के लिए नहीं किया जा rm -rf ..के बाद से डबल डॉट ( ..) पिछले निर्देशिका का मतलब है।

यह कहा जा रहा है, यदि आप मेरे जैसे हैं और एक ही समय में कई टर्मिनल विंडो खुली हैं, तो आप बेहतर सुरक्षित रहेंगे और rm -ir .यह समझने के लिए कमांड के तर्कों पर नज़र डालते हैं।

सबसे पहले, यदि आप rmकमांड मैन पेज ( man rmअधिकांश यूनिक्स के तहत) देखते हैं, तो –rइसका मतलब है कि "निर्देशिका की सामग्री को पुनरावर्ती रूप से हटा दें"। इसलिए, rm -r .अकेले करने से मौजूदा डायरेक्टरी में सब कुछ डिलीट हो जाएगा और सब कुछ बॉप हो जाएगा।

में rm –rf .जोड़ा -f का अर्थ है "अस्तित्वहीन फ़ाइलों की अनदेखी, कभी नहीं शीघ्र"। वह आदेश वर्तमान निर्देशिका में सभी फ़ाइलों और निर्देशिकाओं को हटा देता है और आपको कभी भी पुष्टि करने के लिए संकेत नहीं देता है कि आप वास्तव में ऐसा करना चाहते हैं। -fविशेष रूप से खतरनाक है यदि आप एक विशेषाधिकार प्राप्त उपयोगकर्ता के तहत कमांड चलाते हैं क्योंकि आप किसी भी निर्देशिका की सामग्री को हटाने का मौका पा सकते हैं बिना यह सुनिश्चित करने के लिए कि वास्तव में आप क्या चाहते हैं।

Otherhand पर, में है कि की जगह का अर्थ है "किसी भी हटाने से पहले शीघ्र"। इसका मतलब है कि आपको "ऑप्स" कहने का मौका मिलेगा! आरएम जाने से पहले खुशी से अपनी सभी फाइलें हटा दें।rm -ri .-i-f

अपने शुरुआती सीसादमिन दिनों में मैंने rm -rf /एक सिस्टम पर किया, जबकि पूरे विशेषाधिकारों (रूट) के साथ लॉग ऑन किया। परिणाम दो दिन बीत गया था बैकअप से सिस्टम को पुनर्स्थापित करना। इसलिए मैं अब नौकरी करता हूं rm -ri


6

कैसा रहेगा:

rm -rf "$(pwd -P)"/* 

27
jQuery इतना शक्तिशाली है।
पावेल

5
rm  -rf * 

यह मत करो! यह खतरनाक है! आप सही दिशा में हैं सुनिश्चित करें!


4

सुनिश्चित करें कि आप सही निर्देशिका में हैं

rm -rf *

2
यह उन फ़ाइलों या उपनिर्देशिकाओं को नहीं हटाता है जिनका नाम एक अवधि से शुरू होता है।

1
सच। मेरे परीक्षण में, न तो rm -rf tvanfosson के पास अपने "cd ..; rm -rf <dir-to-remove>" के साथ सर्वश्रेष्ठ समाधान IMO है
digitaljoel

2

यह सबसे सुरक्षित और सामान्य उपाय है:

find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

1

मेरा मानना ​​है कि यह उत्तर बेहतर है:

/unix/12593/how-to-remove-all-the-files-in-a-directory

यदि आपकी शीर्ष-स्तरीय निर्देशिका को कहा जाता है images, तो चलाएं rm -r images/*। यह प्रत्येक फ़ाइल या निर्देशिका में छवियों के भीतर *चलाने के लिए शेल ग्लोब ऑपरेटर का उपयोग करता है rm -r

मूल रूप से आप एक स्तर ऊपर जाते हैं, और फिर कहते हैं कि एक्स निर्देशिका के अंदर सब कुछ हटा दें। इस तरह से आप अभी भी निर्दिष्ट कर रहे हैं कि किस फ़ोल्डर में उसकी सामग्री हटाई जानी चाहिए, जो मूल फ़ोल्डर को संरक्षित करते समय, 'यहां सब कुछ हटाएं' कहने से अधिक सुरक्षित है, (जो कभी-कभी आप चाहते हैं क्योंकि आपको अनुमति नहीं है या बस नहीं चाहते हैं फ़ोल्डर की मौजूदा अनुमतियों को संशोधित करने के लिए)

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