मेरे होम डायरेक्टरी में 'rm -r ~' क्या है?


17

gedit '~' के साथ समाप्त होने वाली छिपी हुई बैकअप फ़ाइलों को बनाता है। मैं अपनी निर्देशिका ट्री का पुनरावर्ती सफाई करना चाहता था।

आदेश rm *~'~' के साथ समाप्त होने वाली सभी स्थानीय फ़ाइलों को हटा देगा

मैंने सोचा था कि rm -r *~ .पूरे पेड़ की सभी फाइलें हटा दूंगा, लेकिन मैं टाइपो-एड करता हूं rm -r ~

एक संदेश था कि कुछ निर्देशिका को हटाया नहीं जा सकता है और मैंने कमांड छोड़ दी है। सवाल यह है: मैं क्या हटा रहा हूं?

मैंने नोटिस किया कि मेरा फाइलज़िला कॉन्फ़िगरेशन चला गया था। क्या यह आदेश होम डायर से सभी छिपी निर्देशिकाओं को हटाता है?


4
खैर, कम से कम मेरे पास एक बैकअप रणनीति है ... कोई वास्तविक नुकसान नहीं हुआ।
जीयूआई

2
जानकार अच्छा लगा; -rजब तक मैं हर चीज से छुटकारा नहीं चाहता, तब तक मेरे पास कभी उपयोग न करने की नीति है ।
ish

3
एक साइड नोट के रूप में, rm -r *~ .सभी फ़ाइलों और फ़ोल्डरों को (वर्तमान निर्देशिका में) मिलान *~या .। ( एक विशेष अपवाद के रूप में .नजरअंदाज कर दिया जाएगा rm, क्योंकि अधिकांश लोग वर्तमान निर्देशिका को पुन: हटाना नहीं चाहते हैं। *~वर्तमान dir में सभी फ़ाइलों और dirs को हटा देता है ~, जो वर्तमान निर्देशिका की उपनिर्देशिकाओं में फ़ाइलों और निर्देशिकाओं को समाप्त नहीं करता है। ) तो यह वही है जो आप चाहते थे। आप शायद निर्देशिका ट्री के माध्यम से पुनरावर्ती रूप से देखने के लिए और गैर-पुनरावर्ती रूप से प्रत्येक फ़ाइल को समाप्त करने के findलिए -execध्वज के साथ उपयोग करना चाहते थे । ~
एलिया कगन

@ एलियाकगन, मुझे ऐसा लगता है, लेकिन यह पता चलता है कि -सेक्स हमेशा एक परेशानी है। होम डायर को फिर से शुरू करना एक परेशानी है, हालांकि :-)
जीयूआई

1
सूचनात्मक: ~चरित्र को इस तरह से भागने के बिना गाएं (जैसे \~:) बैश, जेडएसई, आदि बना देगा ( rmमूल रूप से) आपको लगता है कि आप घर की निर्देशिका का मतलब है।
थॉमस वार्ड

जवाबों:


31

आपने अपने होम डायरेक्टरी के सभी (लगभग) डिलीट कर दिए हैं!

rm -r something कुछ के तहत / फ़ाइलों और निर्देशिकाओं को पुन: हटा देता है ; यह केवल उन वस्तुओं पर विफल होगा जिनके पास हटाने की अनुमति नहीं है, या तो क्योंकि वे एक अलग उपयोगकर्ता (जैसे root) के स्वामित्व में हैं , या क्योंकि वे उपयोग में हैं (उदाहरण के लिए जीवीएफएस माउंट)।

यदि आपने -f(जैसा कि rm -rf something) नहीं जोड़ा , तो आपको कुछ ऐसा मिलेगा:

rm: remove write-protected regular file something’?
rm: descend into write-protected directory something’?

इस बिंदु पर आप गर्भपात कर सकते हैं और आपको तब पता चलता है कि आपने गलत कमांड निष्पादित किया है।

इस तरह की दुर्घटनाओं से बचने के लिए समुदाय से सुझाव

नोट: सामुदायिक विकी, हर कोई योगदान देने के लिए स्वतंत्र महसूस करता है।

  • कुछ फ़ाइलों के लिए, -iफ़ाइलों या निर्देशिकाओं को हटाने पर पुष्टि पाने के लिए विकल्प का उपयोग करें :

    $ rm -ri something/
    rm: remove regular file something/file~’? y
    rm: descend into directory something’? y
    rm: remove regular file something/file’? y
    rm: remove directory something’? y
  • यदि एक वर्तमान निर्देशिका से निकाल रहे हैं, तो इसे ./किसी अन्य स्थान को गलत तरीके से हटाने से बचने के लिए उपसर्ग करें ।:

    $ cd something
    $ rm -v ./*~
    removed ‘./file~’

    उपरोक्त के उपयोग के प्रदर्शन के लिए था ./। यदि कोई उपनिर्देशिका है, तो आप निश्चित rm -v something/*~रूप से उपयोग कर सकते हैं । खबरदार : ऐसा मत सोचो कि rm ./.*वर्तमान निर्देशिका में सभी छिपी हुई फ़ाइलों को हटा देता है। छिपी हुई फ़ाइलों पर वर्कअराउंड के लिए इस सर्वरफॉल्ट प्रश्न को देखें ।

  • डिलीट करने के बजाय मूव करें: फाइलों को डिलीट करने के बजाय पहली बार मैं उन फाइलों को मूव करने के लिए इस्तेमाल करता हूं जिन्हें मैं अंत में डिलीट करने से पहले कहीं और से छुटकारा चाहता हूं। अगर कुछ गलत हो गया तो उसे बहाल करना आसान है।

    mv -b SOURCE DEST
  • यदि आप चयनित फ़ाइलों को पुन: प्राप्त करना चाहते हैं, तो पूर्वावलोकन के लिए find(संभवतः के साथ grep) का उपयोग करें । आपको इसे एक दुर्लभ घटना बनाने की कोशिश करनी चाहिए, लेकिन अगर आपको ...

    1. findबिना किसी तर्क के पुनरावर्ती सभी फाइलों / निर्देशिकाओं को वर्तमान के अंतर्गत सूचीबद्ध करता है। आपको यह देखने का प्रयास करना चाहिए man findकि इसे कैसे चयनात्मक (ट्रेजर ट्राव) बनाया जाए, लेकिन अगर आप परेशान नहीं करना चाहते हैं, तो आप केवल grepउन फ़ाइलों के लिए परिचित का उपयोग कर सकते हैं जिन्हें आप हटाना चाहते हैं।
    2. मान लीजिए मैं एक uber-l33t कर्नेल हैकर हूं, और अपने स्रोत पेड़ में "उदाहरण" फ़ाइलों के कुछ KB से परेशान हूं; मैं नाम वाली सभी फ़ाइलों को हटाना चाहता हूं। इसलिए मैं टाइप करता हूं find | grep example, जो मुझे ये 20 फाइलें देता है यह अच्छा लग रहा है, इसलिए मैं अब उन सटीक फ़ाइलों को हटाता हूं, साथ ही rm -vपहले बताई गई क्रिया के आउटपुट के साथ xargs:
      खोजो | grep उदाहरण | xargs rm -v
      जो मुझे यह आउटपुट देता है इस तरह की पूर्वावलोकन समस्याओं को कहती है कि आप कहां टाइप sampleकरते हैं और इसके बजाय टाइप करते हैं example

उपरोक्त समाधान का उपयोग नहीं किया जाना चाहिए, यदि आपके पास रिक्त स्थान, टैब वर्ण, newlines, या उद्धरण ( "या ') वाले फ़ाइलनाम हो सकते हैं , क्योंकि यह xargsया तो विफल हो जाएगा, या rmअधूरा फ़ाइल नाम के साथ फ़ीड करेगा , जो सबसे खराब स्थिति में गलत को दूर कर सकता है। फ़ाइलें। उपरोक्त कार्य करने का सुरक्षित तरीका यह है कि यह सभी findऑपरेटरों और कार्यों के साथ करें।

निम्नलिखित उन सभी फाइलों को दिखाएगा जिनमें शब्द हैं example

find . -name "*example*"  

यदि वह सूची वह फ़ाइलें है जिसे आप निकालना चाहते हैं, -execतो फ़ाइलों को पास करने के लिए क्रिया का उपयोग करें rm

find . -name "*example*" -exec rm -v {} +

उपयोग करने के साथ अधिक सहायता के लिए खोज का उपयोग करना देखें find


1
पाइपिंग findआउटपुट grepऔर xargs rmखतरनाक है।
जिरहा

2
@izx: जोड़ा mv(मेरी पसंदीदा कमांड);)
ताकत

1
मैं कम से कम findसुरक्षित तरीके से उपयोग करने का एक उदाहरण जोड़ दूंगा, अगर फ़ाइलनाम में स्थान, टैब, न्यूलाइन "या 'वर्ण हैं , तो वह टूटता नहीं है (और संभवतः गलत फ़ाइलों को हटाता है) । जैसे find . -name "*example*" -exec rm -v {} +mywiki.wooledge.org/UsingFind
geirha

1
@geirha: find -deleteइतना खतरनाक क्यों है ? मैंने यहाँ कुछ कहा होगा, लेकिन मुझे नहीं पता कि यह हाल ही में पाया गया था और /बिना पोंछे चलाने के बावजूद, बिना विकल्प के -deleteकेवल कुछ फाइलें मिलीं जिन्हें मैं हटाना चाहता था। मैं देखता हूं कि आप -exec rmइसके बजाय सलाह देते हैं।
ताकत

3
@ तक्कत -deleteखतरनाक नहीं है, और आप इसके बजाय सुरक्षित रूप से इसका उपयोग कर सकते हैं -exec rm {} +। मैं आमतौर पर जब संभव हो तो मानक उपकरण और सुविधाओं का उपयोग करना पसंद करता हूं। -deleteएक गैर-मानक, GNU एक्सटेंशन है find, इसलिए यह उबंटू पर ठीक काम करेगा, लेकिन अन्य प्रणालियों पर नहीं हो सकता है।
गीरा

5

हाँ। एक अलग तर्क के रूप में एक निर्विवाद टिल्ड चरित्र आपके होमडायर के लिए विस्तारित हो जाता है। तो rm -r ~विस्तार हो गया rm -r /home/yourusename। तो आपने rm से कहा कि अपने होमेडिर की सभी फाइलों को पुन: हटा दें।

अधिक जानकारी के लिए http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion देखें कि कैसे टिल्ड विस्तार कार्य करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.