攔截對 rm 的調用,並將已刪除的檔案定向到垃圾箱

攔截對 rm 的調用,並將已刪除的檔案定向到垃圾箱

有沒有辦法攔截對 rm 的調用,而不是永久刪除文件,而是將它們移到垃圾箱?

答案1

有一個webupd8.org 上的食譜為了這。為了防止連結失效,這裡是重要資訊(還有一些補充)。

sudo apt-get install trash-cli

這將安裝trashempty-trash和命令,您可以按原樣使用它們或為其建立list-trash別名(請參閱下文)。restore-trashrmtrash

該命令的語義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[@]}"(因為該命令已從 更改trashtrash-put)。

然後使腳本可執行:

chmod +x trash-rm

一旦你將它放在你的某個目錄中PATH,就在你的 ~/.bashrc 中添加一個別名,這將使 bash 調用你的腳本而不是實際的rm命令:

alias rm="trash-rm"

正如 djeikyb 正確指出的那樣,.bashrc 別名技巧僅適用於修改了 .bashrc 的用戶,並且僅在 bash 終端會話中有效。

應該就是這樣。

答案2

庫垃圾(Ubuntu 中的 libtrash 套件)似乎可以做到這一點,但我從未使用過它。

相關內容