2013-12-17 8 views
6

This question राज्यों की व्याख्या:rm ./-rf "चाल"

यह कई उपयोगकर्ताओं rm ./-rf या rm -- -rf चाल के बारे में पता नहीं कैसे अद्भुत है।

मुझे इन कोशिश करने से डर है, लेकिन वे क्या करते हैं इसके बारे में उत्सुक हैं। उन्हें खोजना भी बहुत मुश्किल है ...

क्या कोई मुझे प्रबुद्ध कर सकता है?

+2

"उन्होंने यह भी खोज करने के लिए बहुत मुश्किल हो जाता ... "- हाँ, Google सभी विराम चिह्नों को अनदेखा करता है। लेकिन http://www.symbolhound.com पर विराम चिह्न के लिए विशेष रूप से एक खोज इंजन है जो किसी अन्य SO उपयोगकर्ता द्वारा बनाया गया था। 'आरएम -' परिणामों के लिए खोज [इस सवाल] उत्पन्न होता है (http://stackoverflow.com/questions/2928934/how-to-delete-file-from-svn) चौथे परिणाम के रूप में जिनके उत्तरों दोनों मामलों की व्याख्या करते हैं। – l4mpi

उत्तर

7

rm ./-rf और/या rm -- -rf विशेष रूप से, नाम की एक फ़ाइल को दूर करने का प्रयास करेंगे, -rf

केवल चाल यहाँ है कि आप सामान्य रूप से एक के साथ एक फ़ाइल है कि शुरू होता है नहीं हटा सकते है "-" क्योंकि आदेश मान लेंगे कि यह एक कमांड तर्क है। फ़ाइल को पूर्ण पथ से पहले, या -- विकल्प (जिसका अर्थ है, सभी विकल्पों को समाप्त करें) का उपयोग करके कमांड अब यह तर्क नहीं मान पाएगा।

यह ध्यान दिया जाना चाहिए कि इस चाल या तो सभी शेल आदेशों के साथ काम नहीं कर सकता है, इसलिए पहले संस्करण का उपयोग करना सबसे अच्छा है।

+1

खोल कमांड तर्कों के बारे में कोई धारणा नहीं करता है; यह बस उन्हें के माध्यम से गुजरता है। यह 'आरएम' कमांड है जो '-rf' को नियंत्रण विकल्पों के रूप में व्याख्या करता है, न कि फ़ाइल नाम के रूप में। –

+0

आप सही हैं @ जोनाथन लेफ्लर, मैंने स्पष्टीकरण के उत्तर को अद्यतन किया है। – Donovan

7

यदि आपके पास अपनी निर्देशिका में -rf नाम की एक फ़ाइल है, तो आपको उस फ़ाइल को निकालना मुश्किल है यदि आपको चाल पता नहीं है।

rm -rf 

एक भी तर्क के रूप में दो कमांड लाइन विकल्प (-r और -f) की आपूर्ति, और rm बताता रिकर्सिवली और जबरन बातें दूर करने के लिए: ऐसा इसलिए है क्योंकि है।

आप लिखते हैं:

rm ./-rf 

तर्क किसी भी अधिक एक पानी का छींटा के साथ शुरू नहीं करता है, तो यह सिर्फ एक फ़ाइल नाम है। इसी प्रकार, सामान्य (लेकिन सार्वभौमिक नहीं) सम्मेलन द्वारा, -- विकल्प तर्कों के अंत को चिह्नित करता है और बाद में कुछ भी विकल्प नहीं होता है (जिसका आमतौर पर इसका अर्थ है कि यह फ़ाइल नाम है)। तो: क्योंकि rm जानता है कि तर्क है कि -- का पालन करें फ़ाइल नाम इसे संसाधित करने के लिए विकल्प हैं, नहीं

rm -- -rf 

फ़ाइल निकाल देता है।

rm *rf* 

अचानक, इस निर्देशिका के साथ ही फ़ाइलों को हटा जाएगा (लेकिन फ़ाइल -rf को नुकसान नहीं होगा):

फ़ाइल -rf और भी अधिक खतरनाक है, तो आप वाइल्डकार्ड का उपयोग है।

+1

वाह, 'आरएम * आरएफ *' * * नहीं करता * जो मैंने अपेक्षित किया था। विकल्प के रूप में वाइल्डकार्ड! यह डरावना है! –

1

कोई पूरा जवाब नहीं है, जैसा कि मुझे लगता है कि अन्य उत्तरों अच्छे स्पष्टीकरण देते हैं।

 
$ ls -rf 
-rf .. . 
$ 

ठीक:

जब मैं अनिश्चित क्या किसी दिए गए rm मंगलाचरण को हटा दिया जाएगा हूँ, मैं बस ls फ़ाइल सूची पहले यह वास्तव में है यकीन है कि मैं क्या हटाना चाहते हैं बनाने के लिए करने के लिए याद करने की कोशिश , स्पष्ट रूप से यह सही नहीं है, फिर से प्रयास करें:

 
$ ls ./-rf 
./-rf 
$ 

बेहतर है। साथ ls का एक इतिहास प्रतिस्थापन करना rm -v (-v सिर्फ अतिरिक्त व्यामोह के लिए/जाँच) और कर देता है वास्तविक हटाएँ:

 
$ rm -v !!:* 
rm -v ./-rf 
removed `./-rf' 
$ 

यह भी, वाइल्डकार्ड, ब्रेस विस्तार, आदि के साथ अच्छी तरह से काम करता है जब आप सुनिश्चित नहीं हैं कि क्या विस्तार बिल्कुल होगा।


इसके अलावा

आप सोच रहे हैं कि कैसे -rf तरह फ़ाइलें, इसकी आश्चर्यजनक आसान अगर आप गंदगी एक पुनर्निर्देशन पहली जगह में बनाया करने के एक बिट:

 
$ ls 
$ echo > -rf 
$ ls 
-rf 
$ 
संबंधित मुद्दे