2012-04-20 20 views
99

मैं कई फ़ाइलों को हटाने के लिए एक BASH स्क्रिप्ट के भीतर rm का उपयोग कर रहा हूं। कभी-कभी फ़ाइलें मौजूद नहीं होती हैं, इसलिए यह कई त्रुटियों की रिपोर्ट करती है। मुझे इस संदेश की ज़रूरत नहीं है। मैंने rm को शांत करने के लिए मैन पेज को खोजा है, लेकिन मुझे मिला एकमात्र विकल्प -f है, जो वर्णन से, "अनगिनत फ़ाइलों को अनदेखा करें, कभी भी संकेत न दें", सही विकल्प प्रतीत होता है, लेकिन नाम प्रतीत नहीं होता है फिट करने के लिए, इसलिए मुझे चिंता है कि इसमें अनपेक्षित परिणाम हो सकते हैं।रिपोर्टिंग से आरएम को कैसे रोकें कि फ़ाइल नहीं मिली थी?

  • -f विकल्प rm मौन करने सही तरीका है? इसे -q क्यों नहीं कहा जाता है?
  • क्या यह विकल्प कुछ और करता है?
+0

आप -f का उपयोग नहीं करना चाहते हैं, तो यह केवल उस फ़ाइल को हटा देता है जिसे आपने केवल पढ़ने के रूप में चिह्नित किया है। – pizza

उत्तर

136

-f का मुख्य उपयोग अपने आप में rm का उपयोग करके फ़ाइलें कि हटाया नहीं किया जाएगा को हटाने के लिए मजबूर करने की है (एक विशेष मामले के रूप में, यह "को हटा" गैर existant फ़ाइलें, इस प्रकार त्रुटि संदेश को दबा)।

आप, साथ ही

$ rm file.txt 2> /dev/null 

(या अपने ऑपरेटिंग सिस्टम के बराबर) का उपयोग करते हुए त्रुटि संदेश अनुप्रेषित कर सकते हैं। rm पर कॉल करने के तुरंत बाद फ़ाइल देखने के लिए $? का मान देख सकते हैं या नहीं।

+3

'--f' जीएनयू कोरुटिल्स' आरएम' के लिए मान्य है, लेकिन केवल इसलिए कि यह '--force' के लिए एक अद्वितीय संक्षेप होता है। लघु रूप '-f' स्पष्ट और अधिक पोर्टेबल है। –

+0

यकीन नहीं है कि मुझे यह भी एहसास हुआ। '-f' यहां '-f' के लिए सिर्फ एक टाइपो है। – chepner

+3

किसी भी कारण से आपने टाइपो को ठीक नहीं किया ??? मैं इसे ठीक करने वाला हूँ ... – iconoclast

44

हां, -f इसके लिए सबसे उपयुक्त विकल्प है।

+0

कुछ सिस्टम आपको तब तक संकेत देंगे जब तक कि आप बैकस्लैश का उपयोग न करें। – vimdude

+6

@ vimdude: यह "कुछ सिस्टम" नहीं है; वह व्यवहार इंगित करता है कि आपके पास एक शेल फ़ंक्शन या उपनाम है जो 'rm' को' rm -i' पर मैप करता है। –

+0

@ किथहॉम्पसन सच – vimdude

3

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

8

\rm -f file कभी भी रिपोर्ट नहीं की जाएगी।

+2

-आर अनावश्यक और खतरनाक है। – mahemoff

+1

मैंने कई फाइलें या निर्देशिकाएं मान लीं। उपयोगकर्ता के अनुरोध को दोबारा पढ़ें और आप सही हैं कि वह केवल फाइलों के लिए पूछ रहा था। तो मेरा जवाब – vimdude

+0

आरएम करने से पहले बैकस्लैश क्या है ?? कृपया दोस्तों को मुझे इसका जवाब चाहिए।विंडोज साइगविन के मेक संस्करण 4.1 पर \ rm से निपट नहीं सकता है जबकि 3.75 काम ठीक है। –

16

-f सही ध्वज है, लेकिन परीक्षण ऑपरेटर के लिए, नहीं RM

[ -f "$THEFILE" ] && rm "$THEFILE" 

यह सुनिश्चित करता है कि फ़ाइल मौजूद है और एक नियमित रूप से फ़ाइल (नहीं एक निर्देशिका, डिवाइस नोड आदि ...)

+2

हालांकि, इसमें दौड़ की स्थिति है, और उत्पादन स्क्रिप्ट में इसका उपयोग नहीं किया जाना चाहिए। – tripleee

+1

तो क्या करना चाहिए? – mmlac

-1

मुझे cshell के लिए एक ही समस्या थी। मेरे पास एकमात्र समाधान था जो एक डमी फ़ाइल बनाने के लिए था जो मेरी लिपि में "आरएम" से पहले पैटर्न से मेल खाता था।

+4

क्या वास्तव में * केवल * समाधान था? क्या आपने 'आरएम-एफ' या' आरएम फाइलनाम> और/dev/null' कोशिश की? –