ทดแทนที่ปลอดภัยสำหรับ OS X `rm` หรือไม่


9

ฉันเคยต้องrmใช้นามแฝงบางอย่างที่ปลอดภัย

ฉันได้ใช้osx-trashงานอยู่ แต่เมื่อฉันอัพเกรดเป็น Ruby 1.9.2 สิ่งนี้จะหยุดทำงาน

ฉันรู้เกี่ยวกับtrash-cliจาก Python แต่ฉันต้องการสิ่งที่ย้ายไฟล์ไปยังโฟลเดอร์ถังขยะใน OS X มากกว่าไดเรกทอรีอื่น

ใครบ้างมีทางออกที่ดี?


9
กรุณาอย่ารับใช้ไปยัง aliased ค่อนข้างได้รับใช้rm mv files/to/be/deleted ~/.Trashปลอดภัยและสอดคล้องกันในทุกระบบ
Asmus

Asmus: คุณเห็นว่าใช้งานได้เฉพาะในกรณีที่ mac ของคุณมีเพียงพาร์ติชันเดียว หากคุณมีพาร์ติชันอื่นการย้ายไปที่ ~ / .Trash ไม่ถูกต้องจริงๆ (พาร์ติชัน ~ ของฉันไม่ใหญ่พอ)
หายไป

1
คุณควรพูดถึงคำถามของคุณว่าคุณมีหลายพาร์ติชั่น!
slhck

1
หายไป: ดีฉันคิดว่าmvยังคงเป็นทางออกที่ปลอดภัยที่สุดของคุณ คุณสามารถสร้างโฟลเดอร์ใหม่ในพาร์ติชันอื่นของคุณที่เรียกว่าTrash(หรือคุณชอบได้) จากนั้นmvไฟล์ที่นั่น เมื่อคุณแน่ใจว่าสามารถลบได้ให้ลบและสร้างโฟลเดอร์นั้นใหม่อีกครั้ง
Asmus

และจากนั้นคุณสามารถมี ~ / .Trash เป็นลิงก์อ่อนไปยังโฟลเดอร์ถังขยะบนพาร์ติชันที่มีพื้นที่เพียงพอ
AlcubierreDrive

คำตอบ:


8

สำหรับ OSX คุณสามารถใช้ safe-rm

brew install safe-rm

คุณต้องทำขั้นตอนเพิ่มเติมเพื่อให้ชอบมากกว่าค่าเริ่มต้นrm- เพิ่ม symlink

echo $PATH

สำหรับฉันฉันมี/usr/local/bin:ก่อน dir เดียวกับการsafe-rmติดตั้ง

เพิ่ม symlink ให้กับ safe-rm

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

ในการลบและคืนค่าเริ่มต้นrmคุณสามารถลบ symlinkrm /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เป็นสาธารณูปโภค Objective-C เช่นOSX ถังขยะ

ฉันเขียนฟังก์ชันเชลล์ที่ไม่เขียนทับไฟล์อย่างที่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 ตัวและฉันต้องการเก็บไฟล์ที่ถูกลบในพาร์ติชั่นเดียวกันแทนที่จะย้ายมันข้าม
หายไป

ฉันเพิ่มลิงค์ไปยังยูทิลิตี้อื่นสองแห่งและฟังก์ชั่นอื่น แต่ละไฟล์ควรเก็บไฟล์ไว้ในพาร์ติชันเดียวกัน
Lri

2

บทนำ (คุณสามารถข้ามไปได้)

สำหรับฉันrm -iจะเพียงพอเพราะมันจะแจ้งให้คุณก่อนที่จะลบไฟล์ใด ๆ อย่างไรก็ตามการรักษาความปลอดภัยเพิ่มเติมบางอย่างที่จัดทำโดยsafe-rmไม่ได้เป็นความคิดที่ไม่ดีเลย

ความเรียบง่ายaliasอย่างเดียวrm=safe-rm -i อาจเพียงพอ แต่rm -rfก็ไม่ได้ผลเพราะ-iมันอยู่-fเหนือกว่า

ดังนั้นเราต้องแน่ใจว่า-iจะตามมาเสมอ-f!


โซลูชันของฉัน (3 ขั้นตอน):

  • ติดตั้ง safe-rm: brew install safe-rm

    คุณยังสามารถใช้งานได้rmแต่คุณได้แก้ไขRM_BINในขั้นตอนถัดไป

  • แก้ไขของคุณ~/.profile(หรือ bash_profile หรืออะไรก็ตาม) และใส่ข้อมูลโค้ดต่อไปนี้ (ซึ่งมีaliasและ a 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 ที่ถูกนำมาใช้ อย่าใช้มันก่อนที่จะออกจากระบบ / เข้าสู่ระบบ!


หมายเหตุ:

  • มันสามารถนำไปใช้กับลินุกซ์ distro ใด ๆ ที่มีการปรับเปลี่ยนเล็กน้อย
  • มันไม่ได้กระตุ้นพนักงานของคุณให้ฟาดฟัน มันจะถามคุณก่อนที่จะลบแต่ละไฟล์!
  • มันทำงานร่วมกับ-rfและกับ regexes
  • หากคุณต้องการใช้rm -rf โดยไม่ต้องถูกถามถึงทุกไฟล์ / โฟลเดอร์เดียวคุณยังคงสามารถใช้งานได้/bin/rm -rf(หรือsafe-rm -rfถ้าคุณติดตั้งไว้)
  • ไม่มีอีกต่อไปโดยไม่ตั้งใจ rm -rf หรือ rm * ;)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.