आरएम को रिपोर्ट करने से कैसे रोकें कि एक फ़ाइल नहीं मिली?


155

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

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

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

जवाबों:


209

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

आप केवल त्रुटि संदेश का उपयोग करके पुनर्निर्देशित भी कर सकते हैं

$ rm file.txt 2> /dev/null

(या आपके ऑपरेटिंग सिस्टम के समतुल्य)। आप $? कॉल rmकरने के तुरंत बाद मान देख सकते हैं कि कोई फाइल वास्तव में निकाली गई थी या नहीं।


3
--fजीएनयू कोरयूटिल्स के लिए मान्य है rm, लेकिन केवल इसलिए कि यह एक अद्वितीय संक्षिप्त नाम है --force। संक्षिप्त रूप -fस्पष्ट और अधिक पोर्टेबल है।
कीथ थॉम्पसन

यकीन नहीं होता कि मुझे भी एहसास हो गया। --fयहाँ सिर्फ एक टाइपो के लिए है -f
चेपनर

2
क्या करता है 2 में 2>?
दान

@Maverick यह किसी भी संदेश को टर्मिनल पर भेजने के बजाय / dev / null को stderr पर भेजे गए रीडायरेक्ट करता है।
बेंजामिन नोलन

73

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


जब तक आप बैकस्लैश का उपयोग नहीं करते तब तक कुछ सिस्टम आपको -f के साथ कमरे में आने का संकेत देंगे।
विमुदे जुने

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

28

-f सही झंडा है, लेकिन परीक्षण ऑपरेटर के लिए, आरएम नहीं

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

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


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

मेरा मानना ​​है कि @tripleee क्या इंगित कर रहा है कि "-f" परीक्षण और फ़ाइल निष्कासन किसी भी क्रम में पूरा हो सकता है। इसे करने का एक और तरीका है: if [ -f "$THEFILE" ]; then rm "$THEFILE"; fiजो परीक्षण और फ़ाइल हटाने के चरणों को स्पष्ट रूप से अनुक्रमिक बनाता है।
19

2
@robla कोड अधिक क्रिया सिंटैक्स के साथ एक ही सटीक कार्य करता है ... &&! =! ... ... परीक्षण हमेशा rm से पहले होगा, लेकिन एक अलग प्रक्रिया तकनीकी रूप से (हालांकि बहुत संभावना नहीं) rm रन से पहले इसे हटा सकती है (जबकि शेल परीक्षण के बाद कोड की व्याख्या की जा रही है)।
टेक्नोसॉरस

टेक्नोसॉरस - ऊओप्स, आप सही कह रहे हैं। आपको क्या लगता है @ mmlac के सवाल का सबसे अच्छा जवाब है?
रोबला

3
और सिर्फ पुष्टि करने के लिए, दौड़ की स्थिति यह है कि कुछ के बीच फ़ाइल को हटा सकता है testऔर rm। कोई रास्ता नहीं है यहाँ rmसे पहले निष्पादित कर सकता testहै। इससे पहले कि आप समवर्ती प्रोग्रामिंग में isa आम गलती को देख रहे हैं - जब आप वास्तव में "लीप" करते हैं, तो आप "लुक" के परिणाम पर भरोसा नहीं कर सकते हैं; इसका समाधान लॉकिंग या परमाणु संचालन का उपयोग करना है। जो आप चाहते हैं ठीक है rm -f, जो बाद का एक उदाहरण है।
ट्रिपल जे

13

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


4
-R अनावश्यक और खतरनाक है।
Mahemoff

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

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

2
@AymanSalah इस संदर्भ में बैकस्लैश किसी भी फंक्शन या उपनाम से बच जाता है जो वास्तविक है rm(जैसा कि 1990 के दशक की शुरुआत में कुछ साइटों पर लोकप्रिय था ताकि शुरुआती लोगों को सामान हटाने से रोका जा सके और फिर उनकी फाइल वापस पाने के लिए सिसडमिन को कॉल किया जा सके)।
ट्रिपल

धन्यवाद - इसने मेरी समस्या हल कर दी .. जाहिरा तौर पर बाहर निकलने वाले कोड का उपयोग &&करते हुए चेंइंग के लिए अनुमति देता है, जब तक कि फ़ाइल नहीं मिली तो यह टूट जाता है।
इगोर

5

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


-9

मेरे पास cshell के लिए एक ही मुद्दा था। मेरे पास एकमात्र उपाय यह था कि मेरी स्क्रिप्ट में "rm" से पहले पैटर्न से मेल खाने वाली डमी फ़ाइल बनाई जाए।


7
क्या वह वास्तव में एकमात्र समाधान था? क्या आपने कोशिश की rm -fया rm filename >&/dev/null?
कीथ थॉम्पसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.