Thay thế an toàn cho OS X `rm`?


9

Tôi đã quen với việc rmphải bí danh một cái gì đó an toàn hơn.

Tôi đã sử dụng osx-trash, nhưng một khi tôi nâng cấp lên Ruby 1.9.2, nó sẽ ngừng hoạt động.

Tôi biết về trash-cliPython, nhưng tôi rất thích thứ gì đó di chuyển tệp vào thư mục Thùng rác trong OS X hơn là thư mục khác.

Có ai có một giải pháp tốt?


9
Xin vui lòng, đừng làm quen với bí danh rm, thay vì làm quen mv files/to/be/deleted ~/.Trash. Nó bảo vệ an toàn nhất quán trên các hệ thống.
Asmus

Asmus: Bạn thấy rằng chỉ hoạt động nếu mac của bạn chỉ có 1 phân vùng. Nếu bạn có một phân vùng khác, việc chuyển sang ~ / .Trash không thực sự chính xác (phân vùng ~ của tôi không đủ lớn).
biến mất

1
Vâng, bạn nên đề cập trong câu hỏi của bạn rằng bạn có nhiều phân vùng!
slhck

1
biến mất: tốt, tôi nghĩ mvvẫn là đặt cược an toàn nhất của bạn. Bạn có thể dễ dàng tạo một thư mục mới trên phân vùng khác của bạn được gọi Trash(hoặc tuy nhiên bạn thích nó) và sau đó mvcác tệp ở đó. Khi bạn đã chắc chắn rằng chúng có thể bị xóa, hãy xóa và tạo lại thư mục hoàn chỉnh đó.
Asmus

và sau đó bạn có thể có ~ / .Trash là một liên kết mềm đến thư mục Thùng rác trên phân vùng có đủ dung lượng
AlcubierreDrive

Câu trả lời:


8

Đối với OSX, bạn có thể sử dụng safe-rm

brew install safe-rm

Bạn cần thực hiện thêm một bước để thích nó hơn mặc định rm- thêm liên kết tượng trưng.

echo $PATH

Đối với tôi, tôi có /usr/local/bin:đầu tiên, giống như safe-rmcài đặt

Thêm liên kết tượng trưng vào safe-rm

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

Để xóa và khôi phục mặc định, rmbạn có thể xóa symlinkrm /usr/local/bin/rm

Các tập tin cấu hình có thể được thêm vào tại /etc/safe-rm.conf

ví dụ:

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

Kiểm tra với rm -rf /testnó sẽ từ chối xóa từsafe-rm.conf


cũng có thể tốt để thêm /vào danh sách các đường dẫn không nên xóa để ngăn rm cổ điển -fr /
Mikael Lepistö

3

hasseg.org/trash là một tiện ích Objective-C như osx-thùng rác .

Tôi đã viết một hàm shell không ghi đè lên các tệp như mong mv * ~/.Trashmuốn. Nó luôn luôn di chuyển các mục để khối lượng khởi động mặc dù.

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
}

Vâng, tôi có nhiều hơn 1 phân vùng và tôi muốn giữ các tệp đã bị xóa trong cùng một phân vùng thay vì di chuyển chúng qua
biến mất vào

Tôi đã thêm liên kết đến hai tiện ích khác và chức năng khác. Mỗi người trong số họ nên giữ các tệp trên cùng một phân vùng.
Lri

2

Giới thiệu (bạn có thể bỏ qua)

Đối với tôi rm -isẽ là đủ, bởi vì nó nhắc bạn trước khi xóa bất kỳ tập tin nào. Tuy nhiên, một số bảo mật bổ sung được cung cấp bởi safe-rmkhông phải là một ý tưởng tồi cả.

Một đơn giản aliasnhư thế rm=safe-rm -i có thể là đủ, tuy nhiên rm -rfsẽ không hoạt động, bởi vì -ibị quá tải bởi -f.

Vì vậy, chúng tôi phải đảm bảo rằng -iluôn luôn đến sau -f!


Giải pháp của tôi (3 bước):

  • Cài đặt an toàn-rm: brew install safe-rm

    Bạn vẫn có thể làm việc với rm, nhưng bạn đã sửa đổi RM_BINtrong bước tiếp theo

  • Chỉnh sửa ~/.profile(hoặc bash_profile hoặc bất cứ điều gì) và đặt đoạn mã sau, (chứa một aliasvà 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
    }
    
  • Cuối cùng , logoutlogin, do đó, các cập nhật trong .profile được áp dụng. KHÔNG sử dụng nó trước khi đăng xuất / đăng nhập!


Ghi chú:

  • Nó có thể được áp dụng cho bất kỳ bản phân phối Linux nào, với những sửa đổi nhỏ.
  • Nó KHÔNG di chuyển nhân viên của bạn để đập. Nó chỉ hỏi bạn trước khi xóa từng tập tin!
  • Nó hoạt động với -rfvà với regexes.
  • Nếu bạn thực sự muốn sử dụng mà rm -rf KHÔNG được yêu cầu cho mỗi tệp / thư mục duy nhất, bạn vẫn có thể sử dụng /bin/rm -rf(hoặc safe-rm -rfnếu bạn đã cài đặt nó).
  • Không còn vô ý rm -rf hay rm * ;)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.