आरएम और वाइल्डकार्ड के बीच आकस्मिक स्थान टाइप करने वाले उपयोगकर्ता को रोकें


29

इरादा:

rm -rf string*

संकट:

rm -rf string *

पहला मामला rm का वैध और सामान्य उपयोग है, एक छोटा टाइपो दूसरे मामले में बहुत सारी समस्याएं पैदा कर सकता है। क्या आकस्मिक दुर्घटना या प्रमुख वाइल्डकार्ड से स्मार्ट तरीके से सुरक्षा करना आसान है?


8
हाल ही में और अच्छी तरह से कॉन्फ़िगर किए गए शेल ( zshया bash) के साथ, मैं वापसी कुंजी दबाने से पहले टैब कुंजी (ऑटो-ट्रिगर को ट्रिगर करने के लिए) को दबाने की
आदत डालूंगा

2
touch -- -iजब आप वाइल्डकार्ड को अपने तर्कों में शामिल करते हैं तो एक फ़ाइल बनाई -iजाएगी rmजिसे पैरामीटर के रूप में पास किया जाएगा -i
मोनिका को पुनः स्थापित करें - एम। श्रोडर

@ MartinSchröder: यदि आप उस निर्देशिका में होते हैं जहाँ फ़ाइल मौजूद है।
अगली सूचना तक रोक दिया गया।

@ MartinSchröder केवल तभी काम करेगा जब आप टाइप करेंगे rm *। यदि आप टाइप करते हैं rm name *, तो इसका विस्तार होगा rm name -i other names-iविकल्प के रूप में संसाधित नहीं किया जाएगा क्योंकि यह फ़ाइल नाम से पहले नहीं है।
बरमार

1
आमतौर पर, एक उपयोगकर्ता केवल एक बार ऐसा करता है।
tedder42

जवाबों:


37

DEBUGसंदिग्ध दिखने वाले आदेशों को रद्द करने के लिए एक जाल लिखा जा सकता है। निम्नलिखित, या इसके समान कोड, आपके लिए जोड़ा जा सकता है ~/.bashrc:

shopt -s extdebug
checkcommand() {
  if [[ $BASH_COMMAND = 'rm -r'*' *' ]]; then
    echo "Suppressing rm -r command ending in a wildcard" >&2
    return 1
  fi
  # check for other commands here, if you like
  return 0
}
trap checkcommand DEBUG

स्वाद के लिए तर्क को समायोजित करें।

(मैं वास्तव में इस दृष्टिकोण के उपयोगी होने की उम्मीद नहीं करता हूं - एक-एक करके परीक्षण करने के लिए विनाशकारी रूप से एक कमांड को गड़बड़ाने के कई तरीके - लेकिन यह प्रश्न का शाब्दिक उत्तर प्रदान करता है)।


47

पूरी तरह से बुलेटप्रूफ सिस्टम का कोई रास्ता नहीं है। और जोड़ना "क्या आपको यकीन है?" चीजों के लिए संकेत दोनों अनुत्पादक हैं और "निश्चित रूप से मुझे यकीन है।" घुटने की प्रतिक्रिया।

एक ट्रिक जिसे मैंने पिछले सालों में एक किताब से उठाया था ls -R blah*, वह है, पहली बार करना , rm -fr blah* अगर और केवल यह कि एलएस की लिस्टिंग से मैं हिट चाहता था।

lsपहले कमांड को करना काफी आसान है , फिर , को हटाना ls -Rऔर बदलना rm -fr

अंतिम प्रश्न है, "यदि जानकारी आपके लिए मूल्यवान थी, तो आपका बैकअप कहां है?"


4
ऊपर के तीर के बजाय आप उपयोग कर सकते हैं ^ls -R^rm -rf^और शायद एक उपनाम के रूप में सेट कर सकते हैं
'13:

एफडब्ल्यूआईडब्ल्यू, यह वही ls -Rहै जो मैं मूल रूप से हर समय करता हूं, लेकिन इस बिंदु पर यह इतनी सहज है कि जब मैंने उत्तर दिया तो मेरे चेतन मन को फिसल गया। तो उसके लिए +1।
जेकॉल्ड

यह भी लाभ है कि यह नुकसान नहीं करेगा यदि आप दर्ज कुंजी को टक्कर देते हैं, या अपने माउस को टकराते हैं और नए सिरे से कुछ में पेस्ट करते हैं। मैं कभी-कभी अधिक कुशल सुरक्षा के लिए कम कुशल क्रम में चीजों को दर्ज करता हूं, उदाहरण के लिए cat > .log, फिर अंदर जाता हूं और पेस्ट करता हूं या फाइलनाम को पहले लिख देता हूं .log। तो मैं किसी भी बिंदु > valuablefileपर cmdline पर नहीं हूं ।
पीटर कॉर्डेस

मैं rm aliased का उपयोग करता हूं rm -i, इसलिए मैं अक्सर अपने rm कमांड की रचना करता हूं और फिर \ लाइन की शुरुआत में डालता हूं । ( \rmrm के लिए उपनाम-विस्तार से बचा जाता है, क्योंकि शब्द का हिस्सा उद्धृत किया गया था)। अगर मुझे जरूरत है -rया -f, हाँ, मैं कभी-कभी lsइसके बजाय के साथ शुरू करता हूं rm, या बस -rfभाग को छोड़ देता हूं । (संपादित करें, आपको बैकस्लैश कोड-फ़ॉर्मेटिंग कैसे मिलती है? bquote bslash bslashququote विफल हो जाता है।
पीटर

8

क्या आप अपने आप को उपयोग करने के लिए प्रशिक्षित कर सकते हैं, कह सकते हैं, rmrfके स्थान पर rm -rf?

यदि हां, तो यह बैश फ़ंक्शन आपको यह देखने का मौका देगा कि कमांड की पुष्टि करने से पहले वास्तव में क्या होगा:

rmrf() { echo rm -rf "$@"; read -p "Proceed (y/N)? "; [ "${REPLY,,}" = y ] && rm -rf "$@"; }

इस फ़ंक्शन को स्थायी बनाने के लिए, ~/.bashrcप्रत्येक कंप्यूटर पर आपके द्वारा उपयोग की जाने वाली फ़ाइल में इस लाइन को जोड़ें ।

सामान्य rmउर्फ के साथ तुलना

एक उपनाम को परिभाषित करना आम है:

alias rm='rm -i'

इसकी दो सीमाएँ हैं:

  1. यदि आप इस उपनाम पर निर्भर होने के लिए आते हैं, तो आप एक झटके में होंगे जब आप मशीन पर या किसी ऐसे वातावरण में होंगे जिसमें यह नहीं है। इसके विपरीत, rmrfउस फ़ंक्शन के बिना मशीन पर चलने की कोशिश एक हानिरहित वापस आ जाएगी command not found

  2. यह उपनाम आपके मामले में कोई मदद नहीं करता है क्योंकि -fकमांड लाइन पर आपके द्वारा आपूर्ति किया जाने वाला -iविकल्प उपनाम में विकल्प को ओवरराइड करता है।


4
विचार बुरा नहीं है। लेकिन यह इस फ़ंक्शन पर निर्भर करता है जिसे इस उपयोगकर्ता द्वारा उपयोग किए जा रहे किसी भी सिस्टम पर इंस्टॉल और उपलब्ध किया जा रहा है। तो मान लें कि वे किसी काम के लिए रिमोट सर्वर में लॉगिन करते हैं और गलत rm -rfकमांड चलाते हैं , क्या होता है? इस तरह से छद्म फ़ंक्शन बनाना अंततः एक सरल समाधान को जटिल करता है: बस अधिक सावधान रहें और समझें कि अनुमतियाँ क्या हैं।
जेकलॉल्ड

4
@JakeGould और rm -f का उपयोग न करें जब तक कि आपको वास्तव में आवश्यकता न हो
बजे एक CVn

1
क्यों परेशान करते हैं rmrf, जैसा कि केवल एक शेल फ़ंक्शन बनाने का विरोध किया गया है rmजो तर्कों की जांच करता है, -rया -rfउस मामले में विशेष तर्क command rm "$@"को लागू करता है , अन्यथा सीधे वास्तविक rmआदेश को लागू करने के लिए बुला रहा है ?
चार्ल्स डफी

3
जब आप अपने ओवरराइड नहीं होते हैं तो आप एक अलग नाम का उपयोग करते हैं ताकि आप अपने आप को पैर में गोली न मारें। और मैं @ MichaelKjörling से सहमत हूं, -fअगर आपके पास नहीं है तो आपको जरूरत नहीं है -i-fउदाहरण के लिए, पढ़ने की फाइल को हटाने से पहले आपको छोड़ना आपको अतिरिक्त चेतावनी देता है।
पीटर कॉर्डेस

6

अगर मैं एक स्थिति है जहाँ गलत फ़ाइलों को हटाने के एक बहुत बड़ी बात नहीं, बातें मैं एक ट्रैशकैन फ़ोल्डर बनाने किया है, की तरह से एक है में हूँ mkdir trashcan, और फिर मैं एक स्क्रिप्ट है rmTrashcanजो एक है rm -rf trashcan/*या rm -rf *या इसी तरह, बहुत सावधानी से लिखा गया है और कई बार जाँच की गई।

इस तरह, अगर मैं कोई गलती करता हूं, तो गलती एक mvकमांड पर है , कमांड पर नहीं rm। एक बार जब मैं करता हूं lsऔर वास्तव में जो मैं हटा रहा हूं, उसके प्रति आश्वस्त हूं, rmTrashcanवास्तव में गंदे काम सुरक्षित रूप से करता है।

यह ऐसी स्थिति के लिए भी बहुत सुविधाजनक था, जहां मुझे बैकअप हटाना पड़ा। मैं mvट्रैशकेन में बैकअप का एक पूरा महीना mvरख सकता था , कुछ को मैं (महीने का 15 वां महीना) बैकअप में रखना चाहता था, फिर rmTranshcanबाकी। एक समान कमांड को rmअपने आप से करना मुश्किल है , और इसे इस तरह से करने से मुझे lsबैकअप को आश्वस्त होने में मदद मिलती है कि मैं किन फ़ाइलों को पीछे छोड़ रहा हूं (केवल उन फ़ाइलों को एन्यूमरेट करने के बजाय जिन्हें मैं हटाने का इरादा रखता हूं)


4

दो आज्ञाओं ( lsऔर rm) से परेशान होने के बजाय , मुझे लगता है कि उपयोग करने के लिए एक सरल और आसान तरीका है find:

find . -maxdepth 1 -name "string*" -delete

यदि आप गलती से टाइप करते हैं, तो "string *"यह नामांकित फ़ाइलों को हटा देगा string charsऔर string letters(जो कि वैसे भी आप चाहते थे), लेकिन यह *शेल की तरह हर फाइल को हड़प नहीं पाएगा।

इसके अलावा, आप -deleteयह देखने के लिए छोड़ सकते हैं कि यह कौन सी फ़ाइलों को हटाने जा रहा है, फिर तीर को हिट करें और -deleteटाइपिंग ^ls -R^rm -rfया अन्य बकवास की तुलना में आसान टाइप करें ।


A findकमांडलाइन पर घोषित स्पष्ट मापदंडों के बजाय मेल खाने वाली फ़ाइलों के लिए नेस्टेड खोज करेगा। मुझे लगता है कि यह निशान छूट गया। मुझसे गलती भी हो सकती है।
हत्यारे

3

क्या आकस्मिक दुर्घटना या प्रमुख वाइल्डकार्ड से स्मार्ट तरीके से सुरक्षा करना आसान है?

ज़रुरी नहीं। यह एक और जवाब में प्रस्तावित है कि आप किसी कार्य को करने से पहले एक संकेत जोड़ने के लिए एक कस्टम कमांड बना सकते हैं। लेकिन इस कस्टम कमांड के साथ समस्या यह है कि होशपूर्वक आपको उन सिस्टमों पर स्थापित किया जाना चाहिए जिन पर आप काम कर रहे हैं। और यहां तक ​​कि अगर यह स्थापित है, तो समस्या यह है कि आपके रिफ्लेक्स को हिट yकरने के लिए काम किया जा सकता है।

मतलब यह सभी यूजर इंटरफेस का मुद्दा है भले ही यह टेक्स्ट / कमांड लाइन स्तर पर हो। कितने सुरक्षा जाल हैं जो आपको उम्मीद करते हैं कि आपको कुछ ऐसा करने से बचाना चाहिए जो आपको नहीं करना चाहिए? यह कैंची की एक जोड़ी की तरह है: यदि आप किसी तरह लापरवाह हैं और कपड़े या कागज को काटने का इरादा रखते हुए पर्ची और अपना हाथ काटते हैं, तो गलती किसकी है? या यहां तक ​​कि ट्रैफिक लाइट और स्टॉप संकेत: वास्तव में एक चालक को प्रकाश को चलाने या ट्रैफिक संकेतों को अनदेखा करने से रोकने के अलावा कुछ भी नहीं है कि वे इस तरह के जोखिम भरे व्यवहार में संलग्न होने पर क्या हो सकता है।

इसने कहा कि सबसे अच्छा, यथार्थवादी समाधान उपयोगकर्ताओं के साथ-साथ समूहों के लिए सिस्टम अनुमतियों में निहित है। उपयोगकर्ता को खुद से बचाने के लिए यह सबसे अच्छा / एकमात्र वास्तविक सुरक्षा जाल है।

यदि आप एक ऐसी प्रणाली पर काम कर रहे हैं, जहां आप इसे एक्सेस करने वाले एकमात्र हैं, तो आपको सिर्फ chmod 777हर चीज के लिए लुभाया जा सकता है , लेकिन यह एक तर्कसंगत प्रणाली सेटअप नहीं है। इसके बजाय अनुमतियाँ 755सभी निर्देशिकाओं के लिए और 644सभी गैर-निष्पादन योग्य फ़ाइलों के लिए कुछ होनी चाहिए । निष्पादन योग्य फ़ाइलें 755कम से कम होनी चाहिए , लेकिन हो सकता है कि 744आप केवल दूसरों को पढ़ना चाहते हों , लेकिन फ़ाइलों को न चलाएं।


2

अपने प्रारंभिक rmकमांड को -fध्वज के बिना लिखने की कोशिश करें , लेकिन -iइसके बजाय, जैसे कि rmवह आपको प्रत्येक फ़ाइल को हटाने के लिए प्रेरित करेगा। छोटे पुनरावर्ती विलोपन के लिए, आप yकुंजी को दबाए रख सकते हैं , एक बार आप सुनिश्चित कर लें कि कमांड सही ढंग से टाइप किया गया है। बड़े विलोपन के लिए, आप ऑपरेशन को निरस्त कर सकते हैं, और कमांडलाइन इतिहास का उपयोग सावधानी से बदलने के -iलिए कर सकते हैं -f


आपको वास्तव में y[RETURN]हर फाइल को दबाना होगा, ऐसा कुछ भी नहीं है जिसे आप GNU rm के साथ पकड़ सकें। -iआपके द्वारा कमांड ठीक से टाइप करने के बाद, संपादित करना एक रास्ता है। तब आपको केवल-पढ़ने के लिए फ़ाइल, और शायद अन्य चीजों पर एक संकेत मिलता है।
पीटर कॉर्डेस

1
बस का उपयोग करें rm -Iतो (यानी कई फाइलों की।) है कि यह केवल एक बार, और केवल संभावित खतरनाक विलोपन के लिए संकेत देता
निक Matteo

1
कम रचनात्मक मंचों में, मेरा जवाब "यदि आपकी टाइपिंग / प्रूफरीडिंग खराब है, तो आप" rm -rf 'वाइल्डकार्ड्स का उपयोग करके कोई व्यवसाय नहीं करते हैं। " मुझे -I स्विच का पता नहीं था ... को <20 साल पहले डाल दिया गया होगा; 'आखिरी बार जब मैंने' मैन आरएम 'किया था। :)
नेविन विलियम्स

2

rm के पास -iऔर -Iहर हटाने से पहले पुष्टि करने के लिए झंडे हैं। अतीत में, कुछ वितरणों ने उन्हें डिफ़ॉल्ट रूप से चालू कर दिया था। यह एक भयानक विचार है। उपयोगकर्ता को सामान्य संचालन के लिए बहुत अधिक पुष्टि संवाद दें और वे आदतन उनकी पुष्टि करना शुरू कर देंगे। यह सिर्फ नए और अधिक कष्टप्रद संवाद के लिए "सावधान रहने के लिए" (हमेशा एक लाल झंडा) की आवश्यकता को बदल देता है। "हाँ। हाँ। हाँ! हाँ! भगवान धिक्कार है, बेवकूफ कंप्यूटर बस फाइलें हटाता है YESYESYESYESYES - CRAP I MEANT NO! NOOOOOOO!" यह "हाँ, लेकिन मेरा कोई मतलब नहीं" संवाद समस्या है। यह उत्तर इस बात का एक दृश्य विवरण प्रदान करता है कि गलत समय पर पुष्टि संवाद क्यों आते हैं।

आप जिस तरह की गलती का वर्णन करते हैं, वह एक पर्ची है , "एक कार्रवाई का प्रदर्शन जो कि इरादा नहीं था"। उपयोगकर्ता आमतौर पर गलती को तुरंत पहचान लेता है और जानता है कि इसे कैसे ठीक किया जाए। दुर्भाग्य से, यूनिक्स उपयोगकर्ता को अवसर नहीं देता है, आरएम तुरंत फ़ाइल को हटा देता है। प्रत्येक अन्य ऑपरेटिंग सिस्टम डिलीट करने की अनुमति देकर इस समस्या को हल करता है, कूड़ेदान के उपयोग से कम से कम थोड़ी देर के लिए।

यूनिक्स के लिए विभिन्न कचरा प्रणालियां हैं, और यह उत्तर सुझावों से भरा है

सवाल उर्फ ​​आरएम का है या उर्फ ​​आरएम का नहीं। पेशेवरों के लिए rm aliasing ...

  1. आप rm विकल्प का उपयोग करने के लिए भूल जाने की पर्ची नहीं बना सकते।

विपक्ष alming rm ...

  1. आप इसे सिस्टम पर भरोसा करने के लिए आ सकते हैं जो इसके पास नहीं है।
  2. डिस्क के पूर्ण होने पर समस्याएँ हो सकती हैं।
  3. समय-समय पर कचरे को खाली करने के लिए बुनियादी ढांचे की आवश्यकता है।
  4. कार्यक्रमों में आरएम के अपेक्षित व्यवहार में हस्तक्षेप न करना सुनिश्चित करें।
  5. शायद पूरी तरह से आरएम का अनुकरण न करें।

यदि आप पहले तर्क का बहुत दूर से पालन करते हैं, तो आप vi (vim नहीं, vi), csh (tcsh, csh) और अन्य पुरातन उपयोगिताओं का उपयोग करके हवा निकालते हैं क्योंकि वे सार्वभौमिक रूप से उपलब्ध हैं। फिर भी, आपके पर्यावरण को ओवर-कस्टमाइज़ करने का खतरा है। मैं अपनी उपयोगिताओं को अपने साथ ले जाना चाहता हूं और जितना संभव हो उतना आसान बनाना चाहता हूं। YMMV।

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

चौथे को आपके नए आरएम को शेल उर्फ ​​बनाकर निपटा जा सकता है alias rm='trash', फिर यह कार्यक्रमों को प्रभावित नहीं करेगा।

पाँचवीं एक समस्या है जिसे मैं पाठक के लिए हल करता हूँ। rm में बहुत सारे स्विच नहीं हैं।


मैंने rm को अलियास कर दिया है rm -i, लेकिन मैं अक्सर इस्तेमाल \rmनहीं किया जाता है। मुझे लगता है मैं rm -iकिसी भी समय के लिए नहीं कह रहा हूँ किसी भी समय टाइप करें । मैं कभी-कभी कमांड को कमांड के lsरूप में शुरू करता हूं , तब केवल \ rm में डाल देता हूं जब मैं काम करता हूं। तो वहाँ कोई रास्ता नहीं मैं गलती से पर वापसी हिट कर सकते हैं rm -rf /के बजाय/.../file
पीटर Cordes

rm -Iया rm --interactive=onceदूर है, की तुलना में कहीं कम कष्टप्रद है rm -i, और अभी भी खतरनाक चीज को पकड़ता है (यह केवल संकेत देता है जब 3 से अधिक फाइलें होती हैं, या यदि यह पुनरावर्ती है, और केवल प्रत्येक फ़ाइल के बदले ONCE है।)
निक मैट्टे

@Kundor हाँ, और यह समीकरण नहीं बदलता है। यह संभवतः इसे अधिक संभावना बनाता है कि उपयोगकर्ता इसे अनदेखा करेगा। उपयोगकर्ता के पास एक लक्ष्य है: सामान हटाएं। संकेत कहते हैं, "क्या आप सुनिश्चित हैं कि आप उस सामान को हटाना चाहते हैं जिसे आपने मुझे हटाने के लिए कहा था?" उपयोगकर्ता को सामान हटाने के लक्ष्य पर अभी भी तय किया जाता है, जो हटाए जाने की पुष्टि नहीं करता है, इसलिए वे बिना सोचे समझे "हां" कहते हैं। -iलक्ष्यों को बदलने के लिए उपयोगकर्ता को समय दे सकता है। संबंधित प्रश्न पर यह उत्तर इसे पूरा करता है।
Schwern

@ शकरन: लेकिन कोई भी संभवतः rm -i30 सेकंड से अधिक समय तक इसे बंद किए बिना नहीं रह सकता है। जबकि rm -Iकेवल संकेत देता है जब यह संभावना है कि आपने खराब कर दिया है; प्रॉम्प्ट केवल बड़े विलोपन के लिए आता है। जब आप कुछ चीजों को हटाने की कोशिश कर रहे थे और संकेत दिया गया है, तो आप को रोक लिया गया और महसूस किया कि आपने गलती से "foo *" टाइप कर दिया है।
निक मैटेओ

@Kundor तीन से अधिक फ़ाइलों को हटाने और पुनरावर्ती रूप से हटाने (पुष्टिकरण जो -rfमुझे अभी पता चला है आदतन द्वारा अक्षम किया गया है ) एक संभावित पेंच का पता लगाने के लिए खराब प्रॉक्सी हैं। उप-निर्देशिका को हटाना चाहते हैं, एक संभावित पेंच नहीं है। संदेश मदद नहीं करता है क्योंकि यह सिर्फ पुष्टि करता है कि उपयोगकर्ता ने एक बिंदु पर उपयोगी जानकारी को जोड़ने के बिना क्या कहा जब उपयोगकर्ता सत्यापित नहीं कर रहा है। "rm: 1 तर्क को पुन: हटा दें?" "हाँ, निर्देशिका को हटा दें, मैंने आपको बस ऐसा करने के लिए कहा था! ... रुको, कौन सी निर्देशिका थी? CRAP !!!"
Schwern

2

मैं सभी !$को अंतिम कमांड ट्रिक में अंतिम तर्क के बारे में सिखाता हूं :

% ls job[XYZ].*
jobX.out1
jobX.out2
[rest of the matches]

% rm !$

यह वाइल्डकार्ड के विस्तार का निरीक्षण करने की अनुमति देता है, और फिर पहले एक स्थान डालने की संभावना के बिना सटीक एक ही ग्लोब पैटर्न का उपयोग करता है *

इसके अलावा, मेरा सुझाव है कि लोग संभावित रूप से विनाशकारी कमांड लाइन पर ग्लोबिंग वाइल्डकार्ड पैटर्न को कभी भी काटकर पेस्ट न करें। क्योंकि मेरे अपने हाथों में एक समस्या है :)

मेरी प्रयोगशाला में एक तकनीक ने पिछले हफ्ते यह गलती की (3 महीने का काम) - और हां हमारे पास बैकअप (1-दिन पीछे) था।


0

हर कोई कह रहा है, "अधिक सावधान रहें", "एक उपनाम / पुष्टि शीघ्र न करें, क्योंकि आपको इस पर उचित ध्यान न देने की आदत हो जाएगी"।

कूल, और सब कुछ। मेरा मतलब है, मुझे नहीं लगता कि आपको इसके लिए एक उपनाम बनाना चाहिए rm(न ही rmrf, क्योंकि आप आसानी से पेंच कर सकते हैं और वास्तविक कमांड टाइप कर सकते हैं)।

लेकिन आप एक उपनाम / स्क्रिप्ट क्यों नहीं बना सकते हैं और इसे कॉल कर सकते हैं, कह सकते हैं, removeऔर केवल इसे एक तर्क (जैसे $ 1) फ़ीड कर सकते हैं? अनजाने स्थान (amiright?) के कारण वाइल्डकार्ड $ 2 होना चाहिए, और इस प्रकार आपकी स्क्रिप्ट / आवरण / उपनाम अन्य को नहीं खिलाया जाएगा। हां, आप एक बार में केवल एक सेट (वाइल्डकार्ड के साथ) विलोपन कर सकते हैं, लेकिन यह वह कीमत है जो आप भुगतान करेंगे।

यदि मैं कुछ अच्छा लिख ​​रहा था, तो हो सकता है कि वह मुझे उन फ़ाइलों और निर्देशिकाओं की संख्या बताए जो इसे हटाने की योजना बना रही हैं, और मेरे द्वारा हटाए जा रहे सामान का कुल आकार, और फिर एक पुष्टि के लिए पूछें, लेकिन इससे आपका प्रवाह बाधित हो सकता है। हो सकता है कि उस पर एक झंडा विकल्प remove? (-मैं)। आप यह देखने के लिए भी $ 1 कर सकते हैं कि क्या यह केवल एक वाइल्डकार्ड है और एक पुष्टिकरण के लिए पूछें, और सूची दें कि आप वास्तव में किस निर्देशिका में हैं।


एक तरफ के रूप में, वहाँ rmबाहर प्रतिस्थापन के एक नंबर रहे हैं । कई यूआई डेस्कटॉप कचरा के अनुरूप होने की कोशिश कर रहे हैं। उनमें से कुछ देखने लायक हो सकते हैं।


6
आपका "हटाएं" उपनाम एक समय में एक से अधिक फ़ाइल को कभी नहीं हटाएगा। आप वाइल्डकार्ड का उपयोग नहीं कर सकते हैं, क्योंकि शेल कमांड को देखने से पहले इसका विस्तार करता है।
हाइमी

तो क्या उस पर कोई इल्जाम लगता है, और फिर उसे स्क्रिप्ट में खींच लेते हैं?
user3082

तो आप टाइप करना चाहते हैं remove \*? यदि आपकी स्क्रिप्ट शेल को इसके इनपुट का विस्तार करने देती है, तो मैं इसे बहुत मदद नहीं करता।
पीटर कॉर्डेस

0

-rfअंत में एक बहुत ही सरल चाल है : rm whatever* -rf
यह त्रुटि दर को काफी कम कर देता है, क्योंकि आप इसके बाद अधिक वर्ण टाइप करते हैं *, इसलिए आपके पास टाइपो देखने के लिए अधिक समय होता है।
इससे सब हल नहीं होता। बस एक साधारण सी रोज़ की तरकीब।

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