OS X `rm` के लिए सुरक्षित विकल्प?


9

मुझे rmकुछ सुरक्षित करने के लिए इस्तेमाल किया जा रहा है।

मैं उपयोग कर रहा हूं osx-trash, लेकिन एक बार जब मैं रूबी 1.9.2 में अपग्रेड करता हूं, तो यह काम करना बंद कर देता है।

मुझे trash-cliपायथन के बारे में पता है , लेकिन मैं बहुत कुछ पसंद करूंगा जो किसी अन्य निर्देशिका के बजाय OS X में ट्रैश फ़ोल्डर में फ़ाइलों को स्थानांतरित करता है।

क्या किसी के पास कोई अच्छा उपाय है?


9
कृपया, अलियास की आदत न डालें rm, बल्कि आदत डालें mv files/to/be/deleted ~/.Trash। यह पूरे सिस्टम में सुरक्षित और सुसंगत है।
Asmus

Asmus: आप देखते हैं कि केवल तभी काम करता है जब आपके मैक में केवल 1 विभाजन हो। यदि आपके पास एक और विभाजन है, तो ~ / .Tash पर जाना वास्तव में सही नहीं है (मेरा ~ विभाजन पर्याप्त बड़ा नहीं है)।
गायब हो गया

1
वैसे आपको अपने प्रश्न में उल्लेख करना चाहिए कि आपके पास कई विभाजन हैं!
जूल

1
गायब हो गया: ठीक है, मुझे लगता mvहै कि अभी भी आपकी सबसे सुरक्षित शर्त है। आप आसानी से अपने अन्य विभाजन पर एक नया फ़ोल्डर बना सकते हैं जिसे Trash(या हालाँकि आप इसे पसंद करते हैं) और फिर mvवहां की फाइलें। एक बार जब आप सुनिश्चित कर लें कि वे हटाए जा सकते हैं, हटाएं और उस संपूर्ण फ़ोल्डर को फिर से बनाएँ।
असमस

और फिर आपके पास बस ~ / हो सकता है। विभाजन पर ट्रैश फ़ोल्डर के लिए एक नरम लिंक हो, जिसमें पर्याप्त स्थान हो
AlcubierreDrive

जवाबों:


8

OSX के लिए, आप उपयोग कर सकते हैं safe-rm

brew install safe-rm

डिफ़ॉल्ट रूप से इसे पसंद करने के लिए आपको एक अतिरिक्त चरण करने की आवश्यकता है rm- एक सिमलिंक जोड़ें।

echo $PATH

मेरे लिए, मेरे पास /usr/local/bin:सबसे पहले है, safe-rmइंस्टॉल के समान ही डीआईआर

से सिमलिंक जोड़ें safe-rm

ln -s /usr/local/bin/safe-rm /usr/local/bin/rm

डिफ़ॉल्ट को हटाने और पुनर्स्थापित करने के लिए rmआप सिमलिंक को हटा सकते हैंrm /usr/local/bin/rm

विन्यास फाइल को इसमें जोड़ा जा सकता है /etc/safe-rm.conf

उदाहरण के लिए:

/private
/Applications
/Developer
/Library
/Network
/System
/Users
/Volumes
/test

rm -rf /testइसके साथ टेस्ट से हटा दिया जाएगाsafe-rm.conf


उन /रास्तों की सूची में जोड़ना भी अच्छा हो सकता है जिन्हें क्लासिक rm -fr /
Mikael Lepistö

3

hasseg.org/trash एक ऑब्जेक्टिव-सी उपयोगिता है जैसे ऑक्स -कचरा

मैंने एक शेल फ़ंक्शन लिखा है जो कि फाइलों को ओवरराइट नहीं mv * ~/.Trashकरेगा। यह हमेशा आइटम को स्टार्टअप वॉल्यूम पर ले जाता है।

trash() {
    for f in "$@"; do
        bn=$(basename "$f")
        while [ -e ~/.Trash/"$bn" ]; do
            bn="$bn $(date +%H.%M.%S %p)"
        done
        mv "$f" ~/.Trash/"$bn"
    done
}

हाँ, मेरे पास 1 से अधिक विभाजन हैं और मैं हटाए गए फ़ाइलों को एक ही पार्टीशन में रखना चाहूँगा, बजाय उन्हें पार करने के
गायब कर

मैंने दो अन्य उपयोगिताओं और एक अन्य फ़ंक्शन के लिंक जोड़े। उनमें से प्रत्येक को एक ही विभाजन पर फाइलें रखनी चाहिए।
लारी जूल

2

परिचय (आप इसे छोड़ सकते हैं)

मेरे rm -iलिए पर्याप्त होगा, क्योंकि यह किसी भी फ़ाइल को हटाने से पहले आपको संकेत देता है। हालाँकि, कुछ अतिरिक्त सुरक्षा द्वारा प्रदान किया गया safe-rmएक बुरा विचार नहीं है।

एक साधारण aliasजैसा कि पर्याप्त rm=safe-rm -i हो सकता है, हालांकि rm -rfकाम नहीं करेगा, क्योंकि इससे अधिक -iहै -f

इसलिए, हमें यह सुनिश्चित करना होगा कि -iहमेशा उसके बाद आएं -f!


मेरा समाधान (3 चरण):

  • सुरक्षित-आरएम स्थापित करें: brew install safe-rm

    आप अभी भी साथ काम कर सकते हैं rm, लेकिन आपने RM_BINअगले चरण में संशोधित किया है

  • अपना ~/.profile(या bash_profile या जो भी) संपादित करें , और निम्नलिखित कोड स्निपेट डालें, (जिसमें एक aliasऔर एक है function):

    alias rm="rm_i"
    
    function rm_i(){
    RM_BIN=safe-rm # you can replace it with regular rm if you like
    
    args=""
    files=""
    argsDone=0 # to make sure arguments are before the files
    
    for var in "$@"
    do
        if [[ $var == \-* ]] ; then
            if [ $argsDone -eq 1 ] ; then
                $RM_BIN # just to show the usage of rm
                return
            fi
            args+=" $var"
        else
            argsDone=1
            files+=" $var"
        fi
    done
    
    args+=" -i" # Put -i at the end (so rm -rf will not ignore it)
    
    $RM_BIN $args $files
    }
    
  • अंत में , logoutऔर login, इसलिए .profile में अपडेट लागू होते हैं। लॉगआउट / लॉगिन करने से पहले इसका उपयोग करें!


टिप्पणियाँ:

  • इसे थोड़े संशोधनों के साथ किसी भी लिनक्स डिस्ट्रो पर लागू किया जा सकता है।
  • यह आपके कर्मचारियों को थ्रैश में स्थानांतरित नहीं करता है। यह प्रत्येक फ़ाइल को हटाने से पहले आपसे पूछता है!
  • यह -rfregexes के साथ और साथ काम करता है ।
  • यदि आप वास्तव में प्रत्येक एकल फ़ाइल / फ़ोल्डर के लिए पूछे rm -rf बिना उपयोग करना चाहते हैं, तो आप अभी भी उपयोग कर सकते हैं /bin/rm -rf(या safe-rm -rfयदि आपने इसे स्थापित किया था)।
  • कोई और अधिक अनजाने rm -rf या rm * ;)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.