rm の呼び出しを傍受し、削除されたファイルをゴミ箱に送る

rm の呼び出しを傍受し、削除されたファイルをゴミ箱に送る

rm の呼び出しをインターセプトし、ファイルを完全に削除するのではなく、ゴミ箱に移動する方法はありますか?

答え1

あります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 にエイリアスを追加します。これにより、bash は実際のrmコマンドの代わりにスクリプトを呼び出すようになります。

alias rm="trash-rm"

djeikyb が正しく指摘しているように、.bashrc エイリアス トリックは、.bashrc が変更されたユーザーに対してのみ、また bash ターミナル セッション内でのみ機能します。

これで終わりです。

答え2

ゴミ(Ubuntu のパッケージ libtrash) はこれを実行するようですが、私は使用したことはありません。

関連情報