2012-08-15 16 views
6

प्रश्न

  • बैश में rm -d और rm -R आदेशों के बीच क्या अंतर है?
  • मुझे किस का उपयोग करना चाहिए?

विवरण

rm आदेश के लिए आदमी पृष्ठ के अनुसार:बैश: "आरएम-डी" और "आरएम-आर" के बीच क्या अंतर है?

  • rm -d प्रयास निर्देशिका के साथ-साथ अन्य प्रकार की फ़ाइलें हटाने के लिए।
  • rm -R प्रत्येक फ़ाइल तर्क में रूट फ़ाइल पदानुक्रम को हटाने का प्रयास करता है। -R विकल्प -d विकल्प का तात्पर्य है।

अब, मुझे लगता है कि पिछले बयान (-R तात्पर्य -d) है, जो मेरे सवाल का जवाब करने के लिए लग सकता है के बारे में पता कर रहा हूँ। हालांकि, मुझे अभी भी आश्चर्य है कि क्यों दोनों कमांड झंडे पहले स्थान पर मौजूद हैं, अगर वे माना जाता है कि वे क्या करते हैं।

इसके अलावा, क्योंकि मैं अभी भी बैश सीखने की प्रक्रिया में हूं, मुझे लगता है कि यह जानना अच्छा है कि बैश प्रोग्रामर (पारंपरिक रूप से) के बीच कौन सा विकल्प पसंदीदा विकल्प है।

+0

क्या अजीब आरएम यह है कि आप लोग चर्चा कर रहे हैं? मेरे बोग मानक जीएनयू कोर्यूटिल्स आरएम में एक-डी विकल्प नहीं है। – themel

+1

'आरएम' के बीएसडी संस्करण में' -d' है। जबकि पीओएसईक्स मानक कहता है कि जब लक्ष्य एक निर्देशिका है, तो 'आरएमडी' को समान रूप से 'आरएमडीआईआर' के साथ व्यवहार करना चाहिए, बीएसडी संस्करण 'आरएम' के ऐतिहासिक व्यवहार का पालन करता है जब तक कि आप' -d' का उपयोग न करें। – chepner

+0

'-d' विकल्प [POSIX] में नहीं है (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/rm.html), इसलिए यह प्रश्न विशिष्ट सिस्टम के लिए टैग किया जाना चाहिए जहां प्रश्न है का निर्देशन किया। –

उत्तर

9

आमतौर पर, rm एक निर्देशिका को हटा नहीं देगा, भले ही यह खाली हो। rm -d सिर्फ rmrmdir जैसा कार्य करता है। यह अभी भी खाली नहीं होने पर निर्देशिका को हटाने से इंकार कर देता है, लेकिन यदि यह खाली है तो ऐसा करेगा।

rm -R पूर्ण रिकर्सिव डिलीट है, निर्देशिका और इसकी सभी सामग्री को हटा रहा है।

मैंने कभी भी -d का उपयोग नहीं किया है, क्योंकि मुझे नहीं पता था कि यह अस्तित्व में है और हमेशा rmdir का उपयोग करें। मैं rmdir/rm -d का उपयोग करता हूं यदि आप केवल निर्देशिका को हटाना चाहते हैं, वास्तव में, खाली है। rm -R सहेजें जब आप पूरी तरह से जानते हैं कि आप निर्देशिका और उसकी सभी सामग्री को निकालने का प्रयास कर रहे हैं।

3

-d विकल्प rm के बीएसडी कार्यान्वयन के लिए विशेष है, जो आपको अपने मैक पर मिलने की संभावना है। यह जीएनयू कार्यान्वयन में मौजूद नहीं है जो आपको लिनक्स सिस्टम पर मिलेगा।

यदि आप पसंदीदा विकल्प की तलाश में हैं, तो यह पूरे पेड़ को हटाने के लिए -r (लोअरकेस) का उपयोग करना होगा और rmdir एकल निर्देशिका को हटाने के लिए, जो आपको अधिक पोर्टेबल कोड मिलेगा।

-1

बस स्पष्ट होने के लिए, आपको कभी भी आरएम-डी का उपयोग नहीं करना चाहिए। यह मानते हुए कि यह "ऑपरेशन की अनुमति नहीं है" त्रुटि संदेश के साथ असफल नहीं होता है, यह निर्देशिका को सामग्री को हटाए बिना हटा देगा। एक खाली निर्देशिका पर यह rmdir जैसा ही है। एक गैर-खाली निर्देशिका पर यह फाइल सिस्टम में एक असंगतता उत्पन्न करता है जिसके लिए fsck द्वारा मरम्मत की आवश्यकता होती है या कुछ बहुत चालाक मैन्युअल हैकिंग द्वारा।

यह एक बेवकूफ विकल्प है जो कभी अस्तित्व में नहीं होना चाहिए था।जब उन्होंने इसे जोड़ा तो बीएसडी लोग कुछ बुरी दवाओं पर थे। rm -r, कम से कम 1973 के बाद से UNIX में किया गया था, और rmdir 1971 के बाद से

+2

'आरएम-डी' निर्देशिका के खाली होने पर "निर्देशिका खाली नहीं है" के साथ विफल रहता है। शायद कुछ बिंदु पर व्यवहार बदल गया। – chepner

0

rm फ़ाइलें हट जाएगा, लेकिन मैं मुद्दों निर्देशिका दूर करने के लिए, तो यह कुछ विकल्प के साथ चिह्नित किये जाने की जरूरत है की कोशिश कर रहा था

rm -f पुष्टि के लिए

rm आर पूछ निर्देशिका निकाल देंगे बिना लेकिन मेरे मामले में पुष्टि के लिए पूछ रहा था निकालें फ़ाइल के लिए बाध्य करेगा, लेकिन क्योंकि मैं इतने सारे फ़ाइलें हो, तो मैं y और y जो अनंत काल के लिए ले जाया गया था टाइपिंग पर रखा

आरएम-आरएफ मेरा अंतिम समाधान था, इसने बिना पूछे निर्देशिका को हटा दिया पुष्टि के लिए जी