Cli [डुप्लिकेट] का उपयोग करके "-r" नाम से शुरू होने वाली फ़ाइल को कैसे निकालें


5

इस सवाल का पहले से ही यहाँ एक जवाब है:

मैं हर बार एक-एक करके विषम-नाम वाली फाइलें बनाता रहा हूं, जैसे

$ls -rthl
$-rw-r--r--  1 shamil hep  290 Aug 13 11:58 -rf

और दिलचस्प रूप से इस फ़ाइल को निकालना असंभव है

rm -f -rf

मुझे पता है कि मुझे "-" जैसे विशेष प्रतीकों से बचने की आवश्यकता है, इसलिए मुद्दा स्पष्ट है। और मैं समाधान जानता था, लेकिन तब से भूल गया हूं।

मैं इसे ठीक से कैसे हटाऊं?

मैंने इस तरह की चीजों की कोशिश की है

rm -f \-rf

लेकिन कोई फायदा नहीं हुआ।


Ty। किसी तरह मैं इसे खोजने में सक्षम नहीं था।
चिकपोवपॉ

2
शायद सबसे बड़ी बंदूकों को खत्म करने के लिए सबसे अच्छा हैpython -c 'import os; os.remove("-rf")'
u2EF1

@ U2EF1 अच्छा है। मैं उस हैक का उपयोग सीखने से पहले करता था --:) अफसोस, हर वितरण में पायथन नहीं है, इसलिए यह बहुत पोर्टेबल भी नहीं है।
पाउलो बुउ

जवाबों:


13

--स्विच का अर्थ है: झंडे का अंत, एक फ़ाइल नाम मान लिया गया है । तो आप कर सकते हैं:

rm -- -rf

फ़ाइल में पूर्ण पथ को भी शामिल करें:

rm /full/path/to/-rf

वास्तव में, यह प्रफुल्लित करने वाला है लेकिन यह कमांड लाइन आपको उत्तर दे सकती है :)

$man rm | cat | grep -B4 -A3 -- "rm --"

To remove a file whose name starts with a `-', for example `-foo', use 
one of these commands:

rm -- -foo
rm ./-foo

1
यह सभी आदेशों के साथ काम नहीं करेगा।
डोनोवन

क्या आप एक उदाहरण प्रदान कर सकते हैं? मैं man bashवहीं उद्धृत कर रहा था ।
पाउलो बुउ

@PauloBu man rmमें bash?

1
@MadPhysicist नहीं, वास्तव में मैं बोली man bash। लेकिन देखते man rmहुए एक लाइन है जो आपको बताती है कि:man rm |cat |grep -B4 -A3 -- "rm --"
पाउलो बुउ

2
क्या यह सम्मेलन सभी आदेशों के साथ काम करता है अप्रासंगिक है, और एक अलग प्रश्न का एक अलग जवाब है। प्रश्नकर्ता ने विशेष रूप से rmफाइलों को हटाने और हटाने के लिए कहा और एक तरीका है rmजो एक्स को भूल गया था। पॉलो बु का जवाब विशेष रूप से उस के साथ व्यवहार करता है, यहां तक ​​कि मैनुअल के लिए उद्धृत करते हुए rmजहां प्रश्नकर्ता को ज़ाइर उत्तर मिला होगा। इसकी प्रमुख समस्या एक बेकार उपयोग है cat। (-:
JdeBP


2

दूसरा रास्ता:

find -name "-rf" -exec rm {} \;

यह अनैच्छिक व्यवहार पर निर्भर करता है find- क्या आपको इस बारे में कोई जानकारी है कि * निक्स के कितने संस्करण इसका समर्थन करते हैं? वैसे भी, यह कहने का सिर्फ एक गोल चक्कर है rm ./-rf
स्कॉट

@ findनिर्देशिका के बिना तर्क लिनक्स के लिए विशिष्ट है (GNU और बिजीबॉक्स दोनों) और इसके बराबर है find .find .स्पष्ट रूप से सूचीबद्ध नाम -तब से शुरू नहीं होते हैं जब से वे शुरू करते हैं ./
गिल्स

लेकिन यह मेरी बात है - आप कैसे जानते हैं कि शुरुआत के साथ find . … -exec … कमांड तर्कों का निर्माण होता है ./? ज़रूर, आप अनुमान लगा सकते हैं कि यह find . … -print(उदाहरण के लिए, ls .या इसके विपरीत ls -l .) के व्यवहार से , और शायद यह मानक है, लेकिन यह प्रलेखित नहीं है।
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.