मेरी होम-डायरेक्टरी में ~ (tilde) नाम की एक फाइल है


46

मैंने अभी देखा कि मेरे पास एक फ़ाइल है, जिसे ~मेरी ~-निर्देशिका में बुलाया गया है ।

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

किसी भी विचार कैसे मैं कर सकते हैं mvया rmयह?


आई-नोड द्वारा इसे हटाने का प्रयास करें।
गोरोस्तज

जवाबों:


55

बहुत ही अंतिम समाधान जब यह उन फ़ाइलों के लिए आता है जिन्हें सामान्य तरीकों से हटाया नहीं जा सकता है:

ls -il 

पहला कॉलम फाइलों का इनकोड नंबर दिखाएगा।

find . -inum [inode-number] -exec rm -i {} \;

यह सत्यापन के बाद निर्दिष्ट इनोड-संख्या के साथ फ़ाइल को हटा देगा।


यह काम किया। शायद रिसी द्वारा समाधान भी अच्छा है, लेकिन मैंने कोशिश नहीं की। आपका बहुत बहुत धन्यवाद!
scrrr

हां, रिसी का जवाब भी अच्छा है। और मुझे लगता है कि यह बेहतर है क्योंकि यह सरल है।
एंड्री रीजेंटोव

अच्छा, +1। मैंने आपके उत्तर का उपयोग -deleteकरने के बजाय बदल दिया -exec, फिर महसूस किया कि आप उपयोग कर रहे हैं rm -iजो एक अच्छा विचार है इसलिए मैंने वापस रोल किया। माफ़ करना।
टेराडॉन

चिंता मत करो। हमेशा खुशी होती है जब कोई मेरे उत्तरों को उनके समय के योग्य समझता है :)
स्क्वीज़ी

यह जवाब मेरे काम नहीं आया। उबंटू 14.04 एलटीएस
खोई

46

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


17
भी, फ़ोल्डर में जा रहा है और rm ./~, उसी कारण के लिए आपने कहा था
कार्लोस कैंपड्रेस

@ CarlosCampderrós एक जवाब है कि बनाने पर विचार करें। मैं इसे "सर्वश्रेष्ठ" और सबसे सरल समाधान के रूप में बताऊंगा, क्योंकि अन्य उत्तरों की तुलना में ./~इसका शाब्दिक अर्थ है " ~वर्तमान निर्देशिका में नामित एक फ़ाइल या फ़ोल्डर " । भागने के वर्ण या इनोड संदर्भ जैसे कोई हैक नहीं हैं।
ADTC

@ADTC: मेरे उत्तर के बचाव में, इसे CWD को बदलने की आवश्यकता नहीं है, जबकि ./~इसका उपयोग करना है। पाँच साल बाद, मेरी याददाश्त थोड़ी फीकी है, लेकिन मुझे लगता है कि यही कारण है कि मैंने ~/~अधिक सामान्य के बजाय सुझाव दिया ./~: प्रश्न विशेष रूप से " ~ओपी के होम डायरेक्टरी में नामित एक फ़ाइल" को संदर्भित करता है ; "वर्तमान निर्देशिका में नहीं"।
रिसी

@rici यह समझ में आता है, और प्रश्न के संदर्भ में यह उचित होगा। लेकिन मैं उन उत्तरों को देखना पसंद करता हूं जो सामान्य हैं, या प्रश्न के विशिष्ट मामले में अधिक विस्तार करने से पहले आम तौर पर पहले बोलते हैं। यही मेरा बचाव है: D
ADTC

20

इसे बोली ( rm '~') या बच ( rm \~)।


यह हमेशा या तो उन लोगों के लिए होता है (उदाहरण के लिए भी $), या --फ़ाइल नाम को तर्क के रूप में व्याख्या करने से रोकने के लिए जोड़ें : rm -- -iनाम वाली फ़ाइल को हटा देता है -i; rm -- *जब आप वर्तमान निर्देशिका में सभी फ़ाइलों को हटाना चाहते हैं , तब भी उपयोगी : कोई आकस्मिक नहीं है rm -f *क्योंकि एक फ़ाइल को इस तरह नाम दिया गया है।


हम्म, नहीं है कि काम करने के लिए प्रतीत नहीं होता है .. मैं एकल उद्धरण, भागने और backticks की कोशिश की .. वह फ़ाइल नहीं उठाता है। या तो कहना है कि वह घर-निर्देशिका के रूप में .. मौजूद हैं या व्याख्या नहीं करता है ~
scrrr

@scrrr आपका शेल क्या है?
डैनियल बेक

दे घुमा के। लेकिन समस्या ने इनोड तरीके से हल किया।
scrrr

@Srrr Glad आपकी समस्या हल हो गई है, लेकिन अब मैं जानना चाहता हूं कि क्यों bash एस्केप आपके सिस्टम पर उसी तरह से काम नहीं करता जैसा कि यह मेरा करता है।
आइजैक राबिनोविच

1
सावधान। --केवल निम्नलिखित तर्कों को पैरामीटर के रूप में व्याख्यायित किया जाता है - यह शेल को अपने विस्तार (जैसे *) करने से नहीं रोकता है , जो कि यहां हो रहा है। (मुझे पता है कि आपने इसे अन्य स्थितियों के लिए एक विकल्प के रूप में सुझाया था, लेकिन एक चेतावनी अच्छी होगी।)
बॉब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.