Rm -i का उपयोग करके 'सभी को हां' कहना


10

कहो कि मैं यह सुनिश्चित करना चाहता हूं कि मैं पहले सही फाइलें निकाल रहा हूं, इसलिए मैंने कुछ ऐसा किया:

rm -i *

बस यह सुनिश्चित करने के लिए कि मैं उन फ़ाइलों के साथ ठीक हूं, जिन्हें मैं हटा रहा हूं। तो यह मुझसे प्रत्येक फ़ाइल के लिए पूछेगा। कुछ फ़ाइलों के बाद, मुझे लगता है कि यह वही है जो मैं निकालना चाहता था। CTRL+Cआईएनजी के बजाय और बस कर रहा है rm *, वहाँ एक तरह से मैं बस सभी को हाँ कह सकता हूँ ?

यह प्रश्न कार्यक्षमता की बजाय जिज्ञासा से अधिक आता है।


अजीब सवाल है, लेकिन वैसे भी, चलो हमारे जवाब में रचनात्मक हो!
dolmen

जवाबों:


8

नहीं।

(जब तक आपको डिबगर के साथ 'इंटरेक्टिव' बिट फ्लिप करने का कोई तरीका नहीं मिल जाता है।)


[उद्धरण वांछित] :-)
डैनियल बेक

6
@ दानिएल: coreutils/src/remove.c:335coreutils/lib/yesno.c:46(उत्पन्न) → rpmatch(3): "किसी मान्यता प्राप्त नकारात्मक प्रतिक्रिया (" नहीं ") के लिए रिटर्न 0, 1 किसी मान्यता प्राप्त सकारात्मक प्रतिक्रिया (" हाँ ") के लिए, और -1 जब प्रतिक्रिया का मूल्य पहचाना नहीं जाता है"
user1686

बहुत अच्छा लगा!
डैनियल बेक

3
इसके अलावा, आप टर्मिनल पर बड़ी संख्या में y [लाइन ब्रेक] पेस्ट कर सकते हैं, जो "हां सभी के लिए" नहीं है, लेकिन एक ही बात होती है।
ओली

हाहा 'y [लाइनब्रेक]' वाली बात के लिए सच है, मुझे यह पसंद है! :)
अमित

9

खैर, यह वास्तव में आपके सवाल का जवाब नहीं देता है। लेकिन उपयोग करने के बजाय rm -i, निम्नलिखित rmपर विचार करें rm -I:

आदमी पेज बताता है:

-I     prompt once before removing more than three files, or when removing 
       recursively. Less intrusive than -i, while still giving protection 
       against most mistakes

आपके ~/.bashrc, पुट में:

 alias rm='rm -I'

यह वास्तव में उपयोगी है!


4

क्या कोई ऐसा तरीका है जो मैं बस सभी को हां कह सकता हूं?

इस कोड का उपयोग करके उत्तर हां है:

$ yes "yes" | rm -vRI directory

  • v: हटा दी गई फ़ाइलों की सूची दिखाएं
  • आर: निर्देशिकाओं और उनकी सामग्री को पुन: हटा दें
  • मैं: ऊपर की सिफारिश के अनुसार।

3

बस पहले का उपयोग कर की जाँच करें ls *.blaऔर फिर rm -f *.blaहो सकता है?

सावधानी बरतें!


हाहा सच यह एक संभावना है
अमित

3

यदि आप स्क्रीन में चल रहे हैं (सामान्य रूप से एक अच्छा विचार), तो आप कर सकते हैं:

ctrl-a : exec .! yes y

यह स्क्रीन को 'यस' कमांड को रन करने के लिए प्रेरित करेगा, और आउटपुट को डायरेक्ट रनिंग प्रोग्राम (rm -i) के लिए कहा जाएगा।


2

यह मक्खी पर एप्लिकेशन फाइल डिस्क्रिप्टर की जगह ले सकता है। हालांकि आपको एक मध्यवर्ती फ़ाइल की आवश्यकता होगी।

आप इस तरह gdb और एक नामित पाइप का उपयोग कर सकते हैं (यह मानते हुए कि आप अधिक टर्मिनलों का उपयोग कर रहे हैं, अन्यथा आपको स्क्रीन या अन्य किसी अन्य का उपयोग करना होगा:

  • "mkfifo myYesYesPipe" के साथ एक नामित पाइप बनाएं
  • आरएमआई के साथ इंटरेक्टिव कॉपी शुरू करें और इसका पीआईडी ​​खोजें
  • खुले जी.डी.बी.

फिर PID की जगह, gdb में निम्न कमांड टाइप करें

attach rmPID
call open("/path/to/myYesYesPipe",66,0666)
call dup2(3,0)
call close(3)
detach
quit

यह आरएम के लिए एक नामित पाइप के साथ कीबोर्ड को बदलता है।

अब आपको नामांकित पाइप को भरना होगा

  • रन हां> / पथ / से / myYesYesPipe

आरएम पाइप को पढ़ेगा और सब कुछ अधिलेखित कर देगा।


@grawity। आपने मुझे डिबगर का उपयोग करने के लिए प्रेरित किया।
डेविड कोस्टा

1
  1. rmप्रक्रिया को पृष्ठभूमि में रखें Ctrl+Z
  2. अंतिम कमांड ( rm -i *कमांड) को याद करें
  3. हटाए -i
  4. Enter कमांड चलाने के लिए
  5. fg %1
  6. Ctrl+C

3
5s/fg/kill/; 6d
user1686

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