สกัดกั้นการโทรไปที่ rm และนำไฟล์ที่ถูกลบไปที่ถังขยะแทน


10

มีวิธีสกัดกั้นการโทรไปที่ rm หรือไม่และแทนที่จะลบไฟล์อย่างถาวรย้ายมันไปที่ถังขยะแทนหรือไม่


คุณถามว่าเป็นสากลแค่ไหน? คุณหมายถึงทุกการโทร rm โดยผู้ใช้หรือกระบวนการทั้งหมดหรือไม่? หรือเพียงเพื่อคุณในขณะที่คุณกำลังทุบตี? หรือ ..
djeikyb

คำตอบ:


13

มีสูตรใน webupd8.orgสำหรับสิ่งนี้ เพื่อป้องกันไม่ให้ลิงค์เน่านี่เป็นข้อมูลที่สำคัญ (มีการเพิ่มเติมเล็กน้อย)

sudo apt-get install trash-cli

นี้จะติดตั้งtrash, empty-trash, list-trashและrestore-trashคำสั่งที่คุณสามารถใช้ตามที่เป็นหรือrmนามแฝงของtrash(ดูด้านล่าง)

ความหมายของtrashคำสั่งนั้นแตกต่างจากมาตรฐานเล็กน้อยrm- มันไม่ต้องการ-rแฟล็กเพื่อให้สามารถลบไดเรกทอรีได้ หากสิ่งนี้รบกวนคุณ webupd8.org เสนอสคริปต์ต่อไปนี้ซึ่งคุณสามารถใส่ไว้ใน PATH ของคุณและเรียกมันว่าtrash-rm:

#!/bin/bash
# command name: trash-rm
shopt -s extglob
recursive=1
declare -a cmd
((i = 0))
for f in "$@"; do
    case "$f" in

        (-*([fiIv])r*([fiIv])|-*([fiIv])R*([fiIv]))
            tmp="${f//[rR]/}"
            if [ -n "$tmp" ]; then
                #echo "\$tmp == $tmp"
                cmd[$i]="$tmp"
                ((i++))
            fi
            recursive=0
        ;;

        (--recursive) recursive=0
        ;;

        (*)
            if [ $recursive != 0   -a  -d "$f" ]; then
                echo "skipping directory: $f"
                continue
            else
                cmd[$i]="$f"
                ((i++))
            fi
        ;;

    esac
done
trash "${cmd[@]}"

ใน Ubuntu 12.04 และใหม่กว่าคำสั่งสุดท้ายในสคริปต์ควรเป็นคำสั่งtrash-put "${cmd[@]}"แทนtrash "${cmd[@]}"(เนื่องจากคำสั่งเปลี่ยนจากtrashเป็นtrash-put)

จากนั้นทำให้สคริปต์เรียกใช้งานได้:

chmod +x trash-rm

เมื่อคุณมีมันในบางไดเรกทอรีในของคุณPATHเพิ่มนามแฝงใน ~ / .bashrc ของคุณซึ่งจะทำให้ทุบตีเพื่อเรียกใช้สคริปต์ของคุณแทนrmคำสั่งจริง:

alias rm="trash-rm"

เมื่อ djeikyb ชี้ให้เห็นอย่างถูกต้องเคล็ดลับนามแฝง. bashrc จะใช้ได้กับผู้ใช้ที่มีการแก้ไข. bashrc และเฉพาะในเซสชันเทอร์มินัล bash เท่านั้น

และที่ควรจะเป็น


นี่เป็นคำตอบที่ดี แต่จะดียิ่งขึ้นหากคุณจัดระเบียบใหม่เพื่อเน้นแนวคิดหลักของการใช้นามแฝง ฉันคิดว่ามันสำคัญที่สุดที่จะเข้าใจวิธี "สกัดกั้น" rm สิ่งที่เกิดขึ้นในสถานที่นั้นสามารถปรับแต่งได้หลายวิธี
djeikyb

นอกจากนี้ยังเป็นการดีที่จะกล่าวถึงว่าสิ่งนี้มีผลเฉพาะกับคำสั่ง rm สำหรับเซสชัน bash ของผู้ใช้เท่านั้น
djeikyb

@djeikyb: ขอบคุณสำหรับข้อเสนอแนะฉันได้อัปเดตคำตอบ
Sergey

มันใช้งานได้ดีสำหรับฉันโดยไม่มีสคริปต์ (เพิ่งติดตั้งและเพิ่มalias="trash") คุณรู้ไหมว่าข้อดีของการมีสคริปต์คืออะไร
desgua

@desgua: จุดประสงค์ของสคริปต์คือการทำให้มีtrashลักษณะเหมือนrmการลบไดเรกทอรี สิ่งนี้อาจมีความสำคัญสำหรับบางสคริปต์ที่คาดว่าrmจะทำงานในแบบที่เป็นเช่น ฉันอัพเดตคำตอบแล้ว
Sergey

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.